今年六月有8个ACMERS 毕业,他们是:
?littleken","knuthocean","dongfangxu","zap","kittig","robertcui","forest","flirly"。
他们决定在毕业去腐败一下,但谁都不愿出钱去BG他人,因而forest想了一个办法,让电脑生成一个仅由他们名字组成的字符串,看
谁的名字在字符串中出现的次数最多,谁的名字出现的次数最多,那么他就得BG其他人,但是因为字符串长度大长了,他们懒得去数,
就把这个任务交给你,谁叫你是他们的师弟呢!作为ACMER,你编一个程序去求解。
输入格式
首先是一个整数T(T<=50)表示这组数据中有T个CASE,接下来有T行,每行是一个CASE,一个如上描述字符串S。 S的长度小于1000000。
输出格式
输出一个在字符串中出现次数最多的名字。如果存在多个名字出现的次数一样多,则输出第一个,顺序见描述。
样例输入
1 zap
样例输出
zap
第一次做的时候有个名字打错了一个字母,被坑了一次,这种简单题一定要细心哦!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int t,i,max,maxi,len;
int count[10];
char s[1000010];
scanf("%d",&t);
while(t-->0){
i=0;
memset(count,0,sizeof(count));
scanf("%s",&s);
len=strlen(s);//必须暂存字符串长度,否则直接用会超时
while(i<len){
switch(s[i]){
case 'l':i=i+9;count[0]++;break;
case 'k':i++;//k开头有两种情况
if(s[i]=='i'){
i=i+5;//k已经被扫过了,长度-1
count[4]++;
}
else{
i=i+9;
count[1]++;
}break;
case 'd':i=i+10;count[2]++; break;
case 'z':i=i+3;count[3]++; break;
case 'r':i=i+9;count[5]++;break;
case 'f':i++;//同k的情况
if(s[i]=='o'){
i=i+5;
count[6]++;
}
else{
count[7]++;
i=i+5;
} break;
}
}
max=0;maxi=0;
for(i=0;i<8;i++){//找出现次数最多的名字
if(count[i]>max){
max=count[i];
maxi=i;
}
}
switch(maxi){
case 0:printf("littleken");break;
case 1:printf("knuthocean");break;
case 2:printf("dongfangxu");break;
case 3:printf("zap");break;
case 4:printf("kittig");break;
case 5:printf("robertcui");break;
case 6:printf("forest");break;
case 7:printf("flirly");break;
}
printf("\n");
}
return 0;
}
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
int main(){
char* ss[8] = {"littleken", "knuthocean", "dongfangxu", "zap", "kittig", "robertcui", "forest", "flirly" };
char s1[8] = { 'l', 'k', 'd', 'z', 'k', 'r', 'f', 'f' };
char s2[8] = { 'i', 'n', 'o', 'a', 'i', 'o', 'o','l' };
int next[8] = { 9, 10, 10, 3, 6, 9, 6, 6 };
int k;
cin >> k;
for (int h = 0; h < k; h++){
string t;
cin >> t;
int max = 0;
int flag = 0;
int ans[8] = { 0 };
for (string::iterator it = t.begin(); it != t.end();){
for (int i = 0; i < 8; i++){
if (*it == s1[i] && *(it + 1) == s2[i]){
it += next[i];
ans[i]++;
break;
}
}
}
for (int i = 0; i < 8; i++){
if (max < ans[i])
{
max = ans[i];
flag = i;
}
}
printf("%s\n", ss[flag]);
}
}