拖了好久了
链接:https://www.nowcoder.com/acm/contest/90/A
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入描述:
第一行输入一个整数t,代表有t组样例:( T<=30)
接下来的t行,都用一个整数n,表示楼梯有n级台阶( 1<=n<=30)
输出描述:
输出跳到第n级台阶有多少种跳法
输入
1 1
输出
1
跳台阶的正常问题,可以到n步,每次都是前一次的两倍,猜了一发答案还错了
#include<bits/stdc++.h> using namespace std; int main() { int T; cin>>T; while(T--) { int n; cin>>n; cout<<(1<<(n-1))<<" "; } return 0; }
链接:https://www.nowcoder.com/acm/contest/90/D
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
然而面试官 xwc 一眼就看到了重点:大学打过 ACM!
xwc:“
听说你很低袄?考你个题:
忽略字母大小写,你这篇简历去掉最长的回文子序列后还有多长?
”
psd 顺手就把这个问题抛给了你。
输入描述:
多组输入,每组输入一个长度不超过 1234 的没空格的字符串,是 psd 的简历。
输出描述:
每组输出一个整数,如题。
输入
输出
2
输入
aBc,bAd
输出
2
经典的dp原题
#include<bits/stdc++.h> using namespace std; const int N = 1235; char str[N]; int dp[N][N]; int main() { while(~scanf("%s",str)) { for(int i=0; str[i]; i++) if(str[i]>='A'&&str[i]<='Z') str[i]+=32; memset(dp,0,sizeof(dp)); int len = strlen(str); for(int i = len-1; i >= 0; --i) { dp[i][i] = 1; for(int j = i+1; j < len; ++j) if(str[i] == str[j]) dp[i][j] = dp[i+1][j-1]+2; else dp[i][j] = max(dp[i][j-1],dp[i+1][j]); } printf("%d ",len-dp[0][len-1]); } return 0; }
链接:https://www.nowcoder.com/acm/contest/90/E
来源:牛客网
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
曾经有两个来自吉尔尼斯的人(A和C)恋爱了,他们晚上经常在一起看头上的那片名为假的回旋星空,
有一天他们分手了,A想通过回旋星空测量他们之间的复合指数,测量的规则是,
计算回旋图标的个数,即选中三颗星星,分别作为回旋图标的起点,拐点和终点,假设现在有三个
星星分别为i,j,k,如果d(a[i],a[j]) == d(a[j],a[k])则表示找到了一个回旋图标,其中d(x,y)表示这两个点的欧氏距离
为了给它很大的希望(i,j,k)和(k,j,i)被认为是两个不同的回旋图标
A花了一晚上终于把整片星空映射到了一张二平面图上,由于星星太多以至于A有点懵逼,所以
1.客户关系管理
2.业务解决方案
3.电子商务
4.供应链管理
输入描述:
第一行一个整数T(T<=10),表示组数
对于每组数据有一个n,表示有n个小星星(0< n < 1000)
接下来跟着n行,每行跟两个整数xi和yi表示每个星星的坐标(-10000< xi, yi<10000)
输出描述:
对于每组数据,如果没有找到回旋图标输出”WA”,否则输出找到图标个数
输入
2 2 1 0 0 1 3 1 0 0 1 0 0
输出
WA 2
备注:
没有重复的星星,且选中的三个星星是互相不一样的(即下标不同)
欧氏距离即直线距离
搞一下这个距离不就好了,n个里面拿两个
#include<bits/stdc++.h> using namespace std; #define ll long long int int main() { ios::sync_with_stdio(false); int t; cin>>t; while(t--) { int n; ll sum=0,x[1005],y[1005]; cin>>n; for(int i=0;i<n;++i) cin>>x[i]>>y[i]; for(int i=0;i<n;++i) { map<ll,int> ma; for(int j=0;j<n;++j) ma[ (x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]) ]++; for(map<ll,int>::iterator it=ma.begin();it!=ma.end();++it) { if(it->second>=2) sum+=(it->second*(it->second-1))/2; } } if(sum==0)cout<<"WA"<<endl; else cout<<sum*2<<endl; } return 0; }
链接:https://www.nowcoder.com/acm/contest/90/F
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给定n,求1/x + 1/y = 1/n (x<=y)的解数。(x、y、n均为正整数)
输入描述:
在第一行输入一个正整数T。
接下来有T行,每行输入一个正整数n,请求出符合该方程要求的解数。
(1<=n<=1e9)
输出描述:
输出符合该方程要求的解数。
输入
3 1 20180101 1000000000
输出
1 5 181
把他化简一下,(x-n)(y-n)=n^2
其实就是处理n*n的因子个数
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int times=20; const int N=100; ll mult_mod(ll a,ll b,ll mod) { a%=mod; b%=mod; ll res=0; while(b) { if(b&1) { res+=a; res%=mod; } a<<=1; if(a>=mod) a%=mod; b>>=1; } return res; } ll pow_mod(ll x,ll n,ll mod) { if(n==1) return x%mod; x%=mod; ll t=x; ll res=1; while(n) { if(n&1) res=mult_mod(res,t,mod); t=mult_mod(t,t,mod); n>>=1; } return res; } bool test(ll a,ll n,ll x,ll t) { ll res=pow_mod(a,x,n); ll last=res; for(int i=1; i<=t; i++) { res=mult_mod(res,res,n); if(res==1&&last!=1&&last!=n-1) return true; last=res; } if(res!=1) return true; return false; } bool miller_rabin(ll n) { if(n<2) return false; if(n==2) return true; if((n&1)==0) return false; ll x=n-1,t=0; while((x&1)==0) { x>>=1; t++; } for(int i=0; i<times; i++) { ll a=rand()%(n-1)+1; if(test(a,n,x,t)) return false; } return true; } ll factor[N]; int tot; ll gcd(ll a,ll b) { if(a==0) return 1; if(a<0) return gcd(-a,b); while(b) { ll c=a%b; a=b; b=c; } return a; } ll pollard_rho(ll x,ll c) { ll i=1,k=2; ll x0=rand()%x; ll y=x0; while(1) { i++; x0=(mult_mod(x0,x0,x)+c)%x; ll d=gcd(y-x0,x); if(d!=1&&d!=x) return d; if(y==x0) return x; if(i==k) { y=x0; k+=k; } } } void find_factor(ll n) { if(miller_rabin(n)) { factor[tot++]=n; return ; } ll p=n; while(p>=n) p=pollard_rho(p,rand()%(n-1)+1); find_factor(p); find_factor(n/p); } int main() { srand(time(0)); int t; cin>>t; while(t--) { int n; cin>>n; if(n==1) cout<<"1 "; else { tot=0; if(miller_rabin(n)||n<=1) factor[tot++]=n; else { find_factor(n); sort(factor,factor+tot); } map<int,int>M; for(int i=0; i<tot; i++) M[factor[i]]++; int ans=1; for(auto X:M) { ans=ans*(2*X.second+1); } cout<<(ans+1)/2<<" "; } } return 0; }
朴素的素数筛选就可以过的,上面非常sb的用了大素数分解
#include<bits/stdc++.h> using namespace std; int main() { int T; scanf("%d",&T); while (T--) { int n; scanf("%d",&n); long long ans=1; for (int i=2;i*i<=n;++i) if (n%i==0) { int t=1; while (n%i==0) n/=i,t+=2; ans*=t; } if (n!=1) ans*=3; printf("%lld ",(ans+1)/2); } }
链接:https://www.nowcoder.com/acm/contest/90/G
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
景驰公司自成立伊始,公司便将“推动智能交通的发展,让人类的出行更安全,更高效,更经济,更舒适”作为公司使命,通过产业融合、建设智能汽车出行行业的方式,打造“利国、利民、利公司、利个人”的无人驾驶出行系统。公司的愿景是成为中国第一、世界一流的智能出行公司。
有一天,景驰公司的工程师在真车上做测试。输入描述:
第一行测试样例数T(0<T<=100)
每个测试样例第一行两个正整数n,m(0<n,m<=30)
接下来的n行是一个n*m的字符矩阵
字符矩阵之后是一串只包含‘L’(左旋)和‘R’(右旋)的字符串,长度不超过1000
每个样例间输出一个空行
输出描述:
第一行两个正整数n,m
接下来的n行是一个n*m的字符矩阵
每个样例后面输出一个空行
输入
2 2 3 +-+ |+| LLRRR 3 2 -+ +| -+ LLL
输出
3 2 -+ +| -+ 2 3 |+| +-+
备注:
左旋即逆时针旋转,右旋即顺时针旋转
-通过一次左旋或右旋会变成|
|通过一次左旋或右旋会变成-
就是一个大模拟
#include<bits/stdc++.h> using namespace std; #define ll long long int string s[50],str; int main() { int t; cin>>t; while(t--) { int n,m,x=0; cin>>n>>m; for(int i=0; i<n; i++) { cin>>s[i]; } cin>>str; for(int i=0; str[i]; i++) if(str[i]=='L') x++; else x--; x=(x%4+4)%4; if(x==0) { cout<<n<<" "<<m<<endl; for(int i=0; i<n; i++) cout<<s[i]<<endl; } else if(x==1) { cout<<m<<" "<<n<<endl; for(int i=m-1; i>=0; i--) { for(int j=0; j<n; j++) if(s[j][i]=='|')cout<<"-"; else if(s[j][i]=='-')cout<<"|"; else cout<<s[j][i]; cout<<endl; } } else if(x==2) { cout<<n<<" "<<m<<endl; for(int i=n-1; i>=0; i--) reverse(s[i].begin(),s[i].end()),cout<<s[i]<<endl; } else if(x==3) { cout<<m<<" "<<n<<endl; for(int i=0; i<m; i++) { for(int j=n-1; j>=0; j--) if(s[j][i]=='|')cout<<"-"; else if(s[j][i]=='-')cout<<"|"; else cout<<s[j][i]; cout<<endl; } } cout<<' '; } return 0; }
链接:https://www.nowcoder.com/acm/contest/90/I
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
牛客网是是一个专注于程序员的学习和成长的专业平台,集笔面试系统、课程教育、社群交流、招聘内推于一体,同时它也是全国最大的IT题库,刷真题,练算法,看面经,得内推,全面提升你的技术水平、推荐最好的工作给你。Tmk很喜欢在牛客网上刷题。
回想起Tmk第一次看到牛客网的时候觉得很棒,就想赶紧做一道题。
于是他打开了a+b problem,题目是这样的,输入a和b,输出a+b=?
例如输入3和4,输出3+4=7.
Tmk觉得好难,通过了与小伙伴们激烈的讨论,然后打下了下面的代码:
#include <cstdio>
using namespace std;
Int main()
{
Int a,b,c;
scanf(“%d %d”,&a,&b);
c=a+b;
printf(“%d+%d=%d”,?,b,?);
return 0;
}
Tmk懵逼了,他不知道?那里应该是填什么字母,现在他好想去ac这道题,请问这两个问号的位置应该用什么代替呢?(一个?的位置应该填一个字母)
输入描述:
无
输出描述:
直接输出第一个问号所表示的字母和第二个问号所表示的字母。中间没有空格。
输入
null
输出
null
说明
题目无输入,只要输出答案即可
签到,输出两个字符
#include<bits/stdc++.h> using namespace std; #define ll long long int int main() { printf("ac "); return 0; }
链接:https://www.nowcoder.com/acm/contest/90/J
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入描述:
第一行一个整数T(T<=100),表示组数
对于每组数据有一个n,表示序列的长度(0< n <100000)
下面一行有n个数,表示每个序列的值(0<ai<1000)
输出描述:
输出两个数
第一个数表示最小的操作步数
第二个数经过若干步以后的数组元素是什么
输入
1 3 1 2 3
输出
3 4
随便写啊,有点贪心的思想?
#include<bits/stdc++.h> using namespace std; #define ll long long int int main() { ios::sync_with_stdio(false); int t; cin>>t; while(t--) { ll sum=0,x,minn=1e9; int n; cin>>n; for(int i=0; i<n; i++) cin>>x,sum+=x,minn=min(minn,x); ll num=sum-n*minn; cout<<num<<" "<<(sum+num*(n-1))/n<<" "; } return 0; }
链接:https://www.nowcoder.com/acm/contest/90/K
来源:牛客网
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
牛客网专注于程序员的学习、成长及职位发展,连接C端程序员及B端招聘方,通过IT笔试面试题库、在线社区、在线课程等提高候选人的求职效率,通过在线笔试、面试及其他工具提升企业的招聘效率。
团队由来自Google、百度、阿里、网易等知名互联网巨头的热血技术青年组成,用户覆盖全国2000多所高校的100W求职程序员及全部一线互联网企业,并仍在高速增长中。
谨慎的ZiZi当然不会直接把密码记录在上面,而是把上面的字符串经过转化后才是真正的密码。转化的规则是把字符串以n行锯齿形写出来,然后再按从左到右,从上到下读取,即为真正的密码。如ABABCADCE以3行写出:
所以真正的密码是ACEBBACAD。但是每一次都要写出来就太麻烦了,您如果能帮他写出一个转换程序,他就送你一个气球。
输入描述:
第一行一个整数T,表示数据组数
对于每组数据,首先一个正整数n(n<=100,000),然后下一行为一个字符串,字符串长度len<=100,000。
输出描述:
对于每组数据,输出一个字符串,代表真正的密码。
输入
1 3 ABABCADCE
输出
ACEBBACAD
这个也是大力模拟啊,可是我竟然打错了
#include<bits/stdc++.h> using namespace std; #define ll long long int char s[100005]; string ans; int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); scanf("%s",s+1); int l=strlen(s+1); if(n==1) printf("%s ",s+1); else { ans=""; for(int i=1; i<=l; i+=2*n-2) ans+=s[i]; for(int i=2; i<n; i++) { for(int j=i; j<=l; j+=2*n-2) { ans+=s[j]; if(j-i+2*n-i<=l)ans+=s[j-i+2*n-i]; } } for(int i=n; i<=l; i+=2*n-2) ans+=s[i]; cout<<ans<<" "; } } return 0; }
链接:https://www.nowcoder.com/acm/contest/90/L
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
(1)药水A能使人的生命值提高,每饮用1个单位能使他生命值变成原来的x倍,即每饮用p个单位能使他的生命值变成原来的x^p(x的p次方)倍。
(2)药水B能使人的能量值提高,每饮用1个单位能使他能量值变成原来的y倍,即每饮用q个单位能使他的能量值变成原来的y^q(y的q次方)倍。
于是TMK迫不及待地喝下了所有的a个单位的药水A和b个单位的药水B,他立马体会到了自己能力的超强变化,然后他看了接下来的说明书:
药水A和药水B能互相抑制对方的负面效果,一旦生命值提升的倍数和能量值提升的倍数不相等,那么在五个小时后将会发生非常严重的后果。
作为埃森哲公司的一员,你觉得这个问题很简单,这得益于埃森哲公司分享知识的文化。
分享知识已成为埃森哲源远流长的文化。
埃森哲公司在帮助客户进行行之有效的知识管理的同时,它的管理层在其内部也进行了成功的知识管理的实践。如今,在埃森哲,分享知识已成为其源远流长的文化。在很大程度上,埃森哲公司的成功得益于其强大的知识管理系统。
输入描述:
第一行一个整数T,代表有T组数据。(1<=T<=5000)
每组数据仅一行,包含四个整数x,a,y,b,意义为题目描述。(1<=x,a,y,b<=10^9)
输出描述:
每组数据输出一行"Yes"或"No"(不包含双引号),表示TMK提升的生命值和能量值的倍数是否相等,相等为"Yes",不相等为"No"。
输入
4 2 20 4 10 20 20 20 20 20 21 21 20 32768 32768 1048576 24576
输出
Yes Yes No Yes
这个%一下就行,双HASH也不错,如果小的话可以直接分解,我这里还是用了大素数分解
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int times=20; const int N=100; ll mult_mod(ll a,ll b,ll mod) { a%=mod; b%=mod; ll res=0; while(b) { if(b&1) { res+=a; res%=mod; } a<<=1; if(a>=mod) a%=mod; b>>=1; } return res; } ll pow_mod(ll x,ll n,ll mod) { if(n==1) return x%mod; x%=mod; ll t=x; ll res=1; while(n) { if(n&1) res=mult_mod(res,t,mod); t=mult_mod(t,t,mod); n>>=1; } return res; } bool test(ll a,ll n,ll x,ll t) { ll res=pow_mod(a,x,n); ll last=res; for(int i=1; i<=t; i++) { res=mult_mod(res,res,n); if(res==1&&last!=1&&last!=n-1) return true; last=res; } if(res!=1) return true; return false; } bool miller_rabin(ll n) { if(n<2) return false; if(n==2) return true; if((n&1)==0) return false; ll x=n-1,t=0; while((x&1)==0) { x>>=1; t++; } for(int i=0; i<times; i++) { ll a=rand()%(n-1)+1; if(test(a,n,x,t)) return false; } return true; } ll factor[N]; int tot; ll gcd(ll a,ll b) { if(a==0) return 1; if(a<0) return gcd(-a,b); while(b) { ll c=a%b; a=b; b=c; } return a; } ll pollard_rho(ll x,ll c) { ll i=1,k=2; ll x0=rand()%x; ll y=x0; while(1) { i++; x0=(mult_mod(x0,x0,x)+c)%x; ll d=gcd(y-x0,x); if(d!=1&&d!=x) return d; if(y==x0) return x; if(i==k) { y=x0; k+=k; } } } void find_factor(ll n) { if(miller_rabin(n)) { factor[tot++]=n; return ; } ll p=n; while(p>=n) p=pollard_rho(p,rand()%(n-1)+1); find_factor(p); find_factor(n/p); } int main() { srand(time(0)); int t; scanf("%d",&t); ll n; while(t--) { int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); if(a==1&&c==1) printf("Yes "); else { tot=0; if(miller_rabin(a)||a<=1) factor[tot++]=a; else { find_factor(a); sort(factor,factor+tot); } map<int,int>M1,M2; for(int i=0; i<tot; i++) M1[factor[i]]++; tot=0; if(miller_rabin(c)||c<=1) factor[tot++]=c; else { find_factor(c); sort(factor,factor+tot); } for(int i=0; i<tot; i++) M2[factor[i]]++; if(M1.size()!=M2.size())printf("No "); else { map<int,int>::iterator it; it=M1.begin(); int f=1; for(auto X:M2) { if(X.first!=it->first||X.second*1LL*d!=it->second*1LL*b)f=0; it++; } if(f)printf("Yes "); else printf("No "); } } } return 0; }