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 }
静态写的,动态会超时