标签:string ndt sizeof 模板 ace else free hive ring
附一个比较详细的讲解 http://www.cnblogs.com/tanky_woo/archive/2010/09/24/1833717.html
模板题(HDU 1671)
#include <cstdio> #include <iostream> #include <cstring> using namespace std; typedef struct Trie{ int v; Trie *next[10]; }Trie; Trie *root; void createTrie(char *str) { int len=strlen(str); Trie *p=root,*q; for(int i=0;i<len;i++) { int id=str[i]-‘0‘; if(p->next[id]==NULL) { q=(Trie*)malloc(sizeof(Trie)); q->v=1; for(int j=0;j<10;j++) q->next[j]=NULL; p->next[id]=q; p=p->next[id]; } else { p->next[id]->v++; p=p->next[id]; } } } int findTrie(char *str) { int len=strlen(str); Trie *p=root; for(int i=0;i<len;i++) { int id=str[i]-‘0‘; p=p->next[id]; if(p==NULL) return 0; } return p->v; } int deal(Trie *T) { int i; if(T==NULL) return 0; for(int i=0;i<10;i++) { if(T->next[i]!=NULL) deal(T->next[i]); } free(T); return 0; } int main() { char str[10010][15]; int t,n,flag; scanf("%d",&t); while(t--){ flag=1; root=(Trie*)malloc(sizeof(Trie)); for(int i=0;i<10;i++) root->next[i]=NULL; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",str[i]); createTrie(str[i]); } for(int i=0;i<n;i++) { if(findTrie(str[i])>1) { flag=0; break; } } if(flag==1)puts("YES"); else puts("NO"); deal(root); } return 0; }
标签:string ndt sizeof 模板 ace else free hive ring
原文地址:http://www.cnblogs.com/a249189046/p/7465573.html