http://acm.hdu.edu.cn/showproblem.php?pid=1671
2 3 911 97625999 91125426 5 113 12340 123440 12345 98346
NO YES
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 10 using namespace std; bool flag; typedef struct Trie_Node { bool isphone; Trie_Node *next[MAX]; Trie_Node () { memset(next,NULL,sizeof(next)); isphone=false; } }Trie; void insert(Trie *root,char *phone) { Trie *p=root; while(*phone!='\0') { if(p->next[*phone-'0']==NULL) p->next[*phone-'0']=new Trie_Node();///build new jie dian if(p->isphone==true) flag=true; p=p->next[*phone-'0']; phone++; } p->isphone=true; for(int i=0;i<MAX;i++) { if(p->next[i]!=NULL) { flag=true; break; } } } void del(Trie *root)///释放空间 { for(int i=0;i<MAX;i++) { if(root->next[i]!=NULL) { del(root->next[i]); } } free(root); } int main(int argc, char *argv[]) { int t; scanf("%d",&t); while(t--) { int i; int n; char phone[11]; Trie *root=(Trie *)malloc(sizeof(Trie)); root->isphone=false; flag=false; for(i=0;i<MAX;i++) { root->next[i]=NULL; } scanf("%d",&n); for(i=0;i<n;i++) { scanf("%s",phone); if(flag!=true) { insert(root,phone); } } if(flag==true) printf("NO\n"); else printf("YES\n"); del(root); //必须释放空间,否则会报Memory Limited的错误 } return 0; }