标签:
NO YES
解法:
大同小异,用字典树做,如果用的是链式的字典树还需要释放内存空间,用数组形式的字典数就不需要、
代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 using namespace std; 6 typedef struct Trie 7 { 8 struct Trie*Node[10]; 9 int num; 10 }Trie_Node; 11 Trie_Node*Head; 12 13 Trie_Node* New_Node() 14 { 15 Trie_Node*H; 16 int i; 17 H=(Trie_Node*)malloc(sizeof(Trie_Node)); 18 for(i=0;i<=9;i++) 19 H->Node[i]=NULL; 20 H->num=0; 21 return H; 22 } 23 24 void Free(Trie_Node* a) 25 { 26 if(a==NULL) return ; //释放内存 27 else 28 { 29 for(int i=0;i<10;i++) 30 Free(a->Node[i]); 31 } 32 free(a); 33 } 34 int Insert_Trie(char STR[]) 35 { 36 Trie_Node *t; 37 Trie_Node *h=Head; 38 int i,Len=strlen(STR),SIGN,j=0; 39 for(i=0;i<Len;i++) 40 { 41 SIGN=STR[i]-‘0‘; 42 if(h->Node[SIGN]==NULL) 43 { 44 t=New_Node(); 45 h->Node[SIGN]=t; 46 j=1; 47 } 48 h=h->Node[SIGN]; 49 if(h->num){j=0;break;} 50 if(i==Len-1)h->num=1; 51 } 52 return j; 53 } 54 int main() 55 { 56 int T,N,i,j,SIGN; 57 char STR[11]; 58 scanf("%d",&T); 59 while(T--) 60 { 61 Head=New_Node(); 62 scanf("%d",&N); 63 SIGN=0; 64 for(i=0;i<N;i++) 65 { 66 scanf(" %s",STR); 67 j=Insert_Trie(STR); 68 if(j==0)SIGN=1; 69 } 70 if(SIGN)printf("NO\n"); 71 else printf("YES\n"); 72 Free(Head); 73 } 74 return 0; 75 }
标签:
原文地址:http://www.cnblogs.com/LWF5201314614/p/4693309.html