竟然while(scanf("%d",&n)&&n)会TLE而while(scanf("%d",&n)!=EOF&&n)就0msAC……铭记……
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1004
#include<iostream>
using namespace std;
char dic[1001][16];
int maxcnt,best;
struct Trie
{
int next[26];
int cnt;
void init(){memset(next,-1,sizeof(next));}
};
int p;
Trie T[1000000];
int build()//建树
{
p=1;
T[p].init();
T[p].cnt=0;
maxcnt=0;
best=0;
}
int insert(char c[],int m)//插入单词并统计
{
int indx=1;
int i;
for(i=0;i<strlen(c);i++)
{
if(T[indx].next[c[i]-'a']==-1)
{
T[indx].next[c[i]-'a']=++p;
T[T[indx].next[c[i]-'a']].init();
T[T[indx].next[c[i]-'a']].cnt=0;
}
indx=T[indx].next[c[i]-'a'];
}
T[indx].cnt++;
if(T[indx].cnt>maxcnt)
{
maxcnt=T[indx].cnt;
best=m;
}
return 0;
}
int main()
{
int n;
int i,j;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
return 0;
build();
for(i=1;i<=n;i++)
{
scanf("%s",dic[i]);
insert(dic[i],i);
}
printf("%s\n",dic[best]);
}
//system("pause");
return 0;
}