这样可以 AC。
#include <stdio.h>
#include <string.h>
int n,cnt,ans,t[10005][30],w[10005],u,res,i,l;
char s[10005];
int main() {
scanf("%d",&n);
while(n--) {
scanf("%s",s);
u=0,res=1,l=strlen(s);
for(i=0;i<l;++i){
if(!t[u][s[i]-'a'])t[u][s[i]-'a']=++cnt;
u=t[u][s[i]-'a'],res+=w[u];
}
++w[u];
res>ans?ans=res:0;
}
printf("%d",ans);
//while(ans) putchar((char)ans%10+'0'),ans/=10;
return 0;
}
但这样输出答案会 WA on #2
#include <stdio.h>
#include <string.h>
int n,cnt,ans,t[10005][30],w[10005],u,res,i,l;
char s[10005];
int main() {
scanf("%d",&n);
while(n--) {
scanf("%s",s);
u=0,res=1,l=strlen(s);
for(i=0;i<l;++i){
if(!t[u][s[i]-'a'])t[u][s[i]-'a']=++cnt;
u=t[u][s[i]-'a'],res+=w[u];
}
++w[u];
res>ans?ans=res:0;
}
//printf("%d",ans);
while(ans) putchar((char)ans%10+'0'),ans/=10;
return 0;
}