1 #include<stdio.h> 2 #include<string.h> 3 int sz,ch[100005][30],val[100005]; 4 void insert(char *s) 5 { 6 int u=0,i,len=strlen(s); 7 for (i=0;i<len;i++) 8 { 9 if (ch[u][s[i]-'0']==0) 10 { 11 memset(ch[sz],0,sizeof(ch[sz])); 12 val[sz]=0; 13 ch[u][s[i]-'0']=sz; 14 sz++; 15 } 16 u=ch[u][s[i]-'0']; 17 } 18 val[u]=1; 19 } 20 int main() 21 { 22 int t,i,j,n,judge,u,d; 23 char s[10005][15]; 24 while (~scanf("%d",&t)) 25 while (t--) 26 { 27 scanf("%d",&n); 28 getchar(); sz=1; 29 memset(ch[0],0,sizeof(ch[0])); 30 for (i=1;i<=n;i++) {gets(s[i]); insert(s[i]); } 31 judge=1; 32 for (i=1;i<=n;i++) 33 { 34 u=0; d=0; 35 while (ch[u][s[i][d]-'0']!=0&&d<strlen(s[i])) 36 { 37 u=ch[u][s[i][d]-'0']; 38 d++; 39 } 40 if (d==strlen(s[i])) 41 { 42 for (j=0;j<=9;j++) 43 if (ch[u][j]!=0) judge=0; 44 } 45 } 46 if (judge==0) printf("NO\n"); 47 else printf("YES\n"); 48 } 49 return(0); 50 }
http://acm.hdu.edu.cn/showproblem.php?pid=1671