Phone List

http://poj.org/problem?id=3630

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 struct node
 4 {
 5     int count ;
 6     int next[11] ;
 7 }tr[100010] ;
 8 int flag, num ;
 9 void node()
10 {
11     tr[num].count = 0 ;
12     memset(tr[num].next,0,sizeof(tr[num].next)) ;
13 }
14 void creat(char *s)
15 {
16     int i ;
17     int f = 0 , x = 0 ;
18     int len = strlen(s) ;
19     for(i=0; i<len; i++)
20     {
21         int t = s[i] - 48 ;
22         if(!f&&tr[x].count==1)
23         {
24             flag = 0 ;
25         }
26         if(tr[x].next[t]==0)
27         {
28             num++ ;
29             node();
30             tr[x].next[t] = num ;
31             f = 1 ;
32         }
33         x = tr[x].next[t] ;
34     }
35     if(!f)
36     flag = 0 ;
37     tr[num].count = 1 ;
38 }
39 int main()
40 {
41      int T, n;
42      char c[11] ;
43      scanf("%d", &T) ;
44      while(T--)
45      {
46          scanf("%d", &n) ;
47          getchar() ;
48          memset(tr,0,sizeof(tr)) ;
49          flag = 1 ;
50          num = 0 ;
51          while(n--)
52          {
53              gets(c) ;
54              if(flag)
55              creat(c) ;
56          }
57          if(flag)
58          printf("YES\n") ;
59          else printf("NO\n") ;
60      }
61      return 0 ;
62 }

静态写的,动态会超时

 

posted @ 2013-02-21 20:18  yelan@yelan  阅读(177)  评论(0编辑  收藏  举报