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号
浙公网安备 33010602011771号