A.GRE
链接:https://www.nowcoder.com/acm/contest/107/A
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入描述:
第一行输入一个T,表示王萌萌询问的单词。(T <= 20) 后面T行每行一个英文单词,题目保证英文单词是[0, 10]数字所表示的单词且单词书写无误,单词用小写形式给出。
输出描述:
对于每一个输入的单词,输出它的中文读音,请用小写形式给出。
输入
5 zero one one four eight
输出
ling yi yi si ba
签到题目
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { string s; int n; cin>>n; while(n--) { cin>>s; if(s=="zero") cout<<"ling"<<endl; else if(s=="one") cout<<"yi"<<endl; else if(s=="two") cout<<"er"<<endl; else if(s=="three") cout<<"san"<<endl; else if(s=="four") cout<<"si"<<endl; else if(s=="five") cout<<"wu"<<endl; else if(s=="six") cout<<"liu"<<endl; else if(s=="seven") cout<<"qi"<<endl; else if(s=="eight") cout<<"ba"<<endl; else if(s=="nine") cout<<"jiu"<<endl; else if(s=="ten") cout<<"shi"<<endl; } return 0; }
B Words Game
链接:https://www.nowcoder.com/acm/contest/107/B
来源:牛客网
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
输入描述:
包含多组测试数据,每组数据开始一行包含不超过20个字母,表示游戏给出的字母。 接下来是一行一个数字N(1 <= N <= 1000) 接下来N行,每行一个字符串表示词典中的单词,单词长度不会超过10。
输出描述:
每组数据输出一行,表示最长可能拼出的单词长度,如果一个单词都拼不出,那就输出0。
输入
masterblodpo 7 boogie magnolia punch blood master inherent phantom ablderrivala 5 arrival blade runner incendies sicario
输出
6 7
思路:
暴力就行,一个一个的找
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char s[30]; char w[20]; int main() { int n; int maxx; while(cin>>s) { maxx=0; int l1=strlen(s); cin>>n; for(int i=0;i<n;i++) { cin>>w; int l2=strlen(w); int j=0,k=0; int flag=0; for(j=0;j<l2;j++) { for(; k<l1; k++) { if(w[j]==s[k]) { if(j==l2-1) flag=1; k++; break; } } } if(flag==1) { maxx=max(maxx,l2); } } cout<<maxx<<endl; } return 0; }
C Arch0n's interesting game
链接:https://www.nowcoder.com/acm/contest/107/C
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
Arch0n老师is a rich man, 他靠自己的才华和智商年纪轻轻就赚了不少钱。为了训练自己的智商,他经常玩一些interesting的游戏来训练自己的智商,比如什么RGB游戏,还有和妹子一块玩Don't Starve。言归正传,今天他又发明了一个新的interesting game。
Ar老师手上有一堆卡牌,然后卡牌上写了一个数字Ai(正整数),当前他有n张牌,然后他总是随机取出两张来,然后他一眼就能看出这两牌中哪一张小(相同就取相同的,这操作好像对于Ar老师来说太简单了),作为这两张牌的有效分值,然后呢他陷入了沉思,对于n张牌取两张牌显然有确定的组合可能性,有n*(n-1)/2对组合,然后他想知道所有这些组合中第k大的分值是多少。
输入描述:
输入一个t表示数据组数;(0<t<=10) 接下来一行是n,k,表示n张牌和最后第k大的分值;(1<n<2500,保证0<k<=n*(n-1)/2) 接下来一行是n个值ai,表示第i张牌上的数字(0 < ai <= 10000000)。
输出描述:
每组数据输出一行,即第k大的分值为多少。
输入
2 3 2 1 2 3 3 1 4 2 1
输出
1 2
思路:
其实就是排序之后从最大的依次往后找,首先最大的一定不存在,第二大的包含一个即第二大和第一大,第三大的包含2个,即第二大和第一大,。。。。也就是说相当于一个等差数列。详细见代码:
#include<iostream> #include<algorithm> using namespace std; int main() { int T, N, K; cin>>T; int a[100000]; while(T--) { cin>>N>>K; for(int i=1; i<=N; i++) { cin>>a[i]; } sort(a+1, a+1+N); int x=1; int i; for(i=N-1; i>=1; i--) { if(K<=x) { break; } K-=x; x++; } cout<<a[i]<<endl; } return 0; }D 另一个另一个简单游戏
链接:https://www.nowcoder.com/acm/contest/107/D
来源:牛客网
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
输入描述:
有多组输入数据,第一行为一个数字T,代表有T组输入数据 (0<T≤20)。 接下来为T组数据。 每组测试数据分2行: 第一行为n,表示有n个数(1≤n≤100) 接下来的一行有n个正整数ai,表示初始的n个数(1≤ai≤10000,1≤i≤n)。
输出描述:
对于每组数据,在一行上输出最后剩下数的期望值的整数部分。
输入
2 3 1 1 1 2 2 3
输出
1 2
思路:
其实就是·n个数的和除以n的关系
代码:
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define M 10005 int n,a[M]; int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); int sum=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } printf("%d\n",sum/n); } return 0; }G 小国的复仇
链接:https://www.nowcoder.com/acm/contest/107/G
来源:牛客网
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
众所周知,汀老师是XDUACM实验室最优秀的人,无论是学习还是打游戏。今天他突然想到一个好玩的游戏。规则是这样的,在游戏中他要得到n个小国,初始的时候小国和小杰各有1个。经过了很久的修炼,汀老师学会了两种魔法,他每次可以动用自己的智慧来使用魔法。
第一个魔法:(小杰变小国)可以将自己的智慧复制和当前小杰一样数量的小国出来;
第二个魔法:(小国大爆发)可以将当前的小杰变成和小国的数量一样,然后小国的数量加倍!
因为汀老师的智力是无限多的,他不关心花掉的智力大小。但是好学的汀老师想尽快得到n个小国,使得能有更多的时间去读paper和打比赛。他想问问你,最少需要使用多少次魔法可以得到n个小国。
得到了n个小国后,汀老师去学习,但是小国们基因突变在电脑里越来越多!他们来组织汀老师学习,现在告诉汀老师我要得到更多的同伴!
输入描述:
多组数据,第一行一个正整数T(T<=100000)表示数据组数。 接下来T行,每行一个正整数n(n<=10^6)。
输出描述:
对于每组数据输出一个整数,表示得到n个小国汀老师最少需要使用多少次膜法。
输入
2 1 3
输出
0 2
思路:
规律题目,当n为素数的时候就是n-1,当n不为素数时就是他的两个因子的方法的和,就是这么一个规律
代码:
#include<bits/stdc++.h> using namespace std; int t,n; long long ans[1000005]; int main() { ans[1]=0; ans[2]=1; for(int i=2;i<=1000000;i++) { if(ans[i]==0) { ans[i]=i-1; } for(int j=2;j<=i;j++) { if(i*j>1000000) break; if(ans[i*j]==0) ans[i*j]=ans[i]+ans[j]; } } scanf("%d",&t); while(t--) { scanf("%d",&n); cout<<ans[n]<<endl; } return 0; }