pku 3630 Phone List
//这题用动态数组的话,会TLE。用静态数组125MS(也可先排序再一一比较前缀):
#include <stdio.h>
#include <string.h>
#define MAXTSIZE 100000
#define MAXLEN 15
typedef struct TNode
{
TNode()
{
end=false;
memset(next,0,sizeof(next));
}
bool end;
TNode *next[10];
}*Trie;
TNode node[MAXTSIZE];
int index;
bool insert(Trie T,char *str)
{
while(*str)
{
if( T->end == true ) return false;
int i=*str-'0';
if(!T->next[i]) T->next[i]=node+index++;
T=T->next[i];
str++;
}
for(int i=0; i<10; i++)
if(T->next[i]) return false;
T->end=true;
return true;
}
int main()
{
int n,cas;
char phone[MAXLEN];
scanf("%d",&cas);
while(cas--)
{
index=0;
Trie tree=node+index++;
bool ok=true;
scanf("%d",&n);
while(n--)
{
scanf("%s",phone);
if(ok)
{
ok=insert(tree,phone);
}
}
if(ok) printf("YES\n");
else printf("NO\n");
for(n=0; n<=index; n++)
{
node[n].end=false;
memset(node[n].next,0,sizeof(node[n].next));
}
}
return 0;
}
浙公网安备 33010602011771号