#include"cstdio" #include"cstdlib" #include"cstring" using namespace std; const int MAXN=600005; const int N=10; bool flag; struct node{ bool val; node* next[N]; node() { val=false; for(int i=0;i<N;i++) next[i]=NULL; } }; node memory[MAXN]; int ant; node *root; void insert(char *s) { //设Xn是Yn的前缀 node* p=root; for(int i=0;s[i];i++) { int k=s[i]-‘0‘; if(p->next[k]==NULL) p->next[k]=&memory[ant++];//now node(); p=p->next[k]; if(p->val==true)//Xn在Yn之前插入 { flag=true; } } p->val=true; for(int i=0;i<N;i++) { if(p->next[i]!=NULL)//若Yn在Xn之前插入则比存在一个next[i]不为NULL { flag=true; break; } } } /* void del(node *p) { for(int i=0;i<N;i++) { if(p->next[i]!=NULL) { del(p->next[i]); } } delete p; } */ int main() { int T; scanf("%d",&T); for(int t=1;t<=T;t++) { ant=0;memset(memory,0,sizeof(memory)); flag=false; root=&memory[ant++];//new node(); int n;scanf("%d",&n); char phone[15]; while(n--) { scanf("%s",phone); if(!flag) insert(phone); } if(flag) printf("NO\n"); else printf("YES\n"); //del(root); } return 0; }
原文:http://www.cnblogs.com/program-ccc/p/5120206.html