Live2d Test Env

HDU1671 水题字典树

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int T,trie[110010][10],n,cnt;
int f[110010];
char c[12];
bool flag;
void _insert()
{
     int L=strlen(c+1),tmp=0;
     for(int i=1;i<L;i++){
            if(!trie[tmp][c[i]-'0']) trie[tmp][c[i]-'0']=++cnt;
            tmp=trie[tmp][c[i]-'0'];
            if(f[tmp]) flag=false;
     }//最后一位单独判断 
     if(trie[tmp][c[L]-'0']) flag=false;
     else trie[tmp][c[L]-'0']=++cnt;
     f[trie[tmp][c[L]-'0']]=1;
}
int main()
{
    scanf("%d",&T);
    while(T--){
          scanf("%d",&n);
          memset(trie,0,sizeof(trie));
          memset(f,0,sizeof(f));//记录是否为单词尾字母 
          flag=true;cnt=0;
          for(int i=1;i<=n;i++){
                scanf("%s",c+1);
                if(flag) _insert();
          }
          if(flag) printf("YES\n");
          else printf("NO\n");
    }
    return 0;
}

 

posted @ 2017-10-18 07:05  nimphy  阅读(150)  评论(0编辑  收藏  举报