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;
}