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
");
50         else
51         printf("NO
");
52     }
53     return 0;
54 }
原文地址:https://www.cnblogs.com/sooflow/p/3282375.html