首页 > 其他 > 详细

HDU1671 水题字典树

时间:2017-10-18 09:29:10      阅读:217      评论:0      收藏:0      [点我收藏+]
#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;
}

 

HDU1671 水题字典树

原文:http://www.cnblogs.com/hua-dong/p/7684896.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!