hdu 1671Phone List
只能说数据比较水而已结点应该得开到le10的,刚开始那么开的时候,编译出错了,说是数组开太大了,后来改成le6就过了。
1 #include<cstdio> 2 #include<cstring> 3 const int maxnode=1e4; 4 int ch[maxnode][10]; 5 int val[maxnode]; 6 int sz; 7 void insert(char *s) 8 { 9 int u=0,n=strlen(s); 10 for(int i=0;i<n;i++) 11 { 12 int c=s[i]-'0'; 13 if(!ch[u][c]) 14 { 15 memset(ch[sz],0,sizeof(ch[sz])); 16 ch[u][c]=sz++; 17 } 18 else if(i==n-1&&ch[u][c]) 19 val[ch[u][c]]+=2; 20 u=ch[u][c]; 21 if(val[u]) val[u]++; 22 } 23 val[u]++; 24 } 25 int flag() 26 { 27 for(int i=1;i<sz;i++) 28 if(val[i]>=2) return 0; 29 return 1; 30 } 31 int main() 32 { 33 int t; 34 scanf("%d",&t); 35 while(t--) 36 { 37 sz=1; 38 memset(ch[0],0,sizeof(ch[0])); 39 memset(val,0,sizeof(val)); 40 int n; 41 scanf("%d",&n); 42 char s[15]; 43 for(int i=0;i<n;i++) 44 { 45 scanf("%s",s); 46 insert(s); 47 } 48 if(flag()) 49 printf("YES\n"); 50 else 51 printf("NO\n"); 52 } 53 return 0; 54 }