• 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
    ");
              else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    事务与锁的一些总结
    NYOJ 73
    NYOJ 456
    Sleep函数
    NYOJ 488(素数环)
    NYOJ 308
    NYOJ 27
    NYOJ 325
    NYOJ 138
    求两个或N个数的最大公约数(gcd)和最小公倍数(lcm)的较优算法
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7684896.html
Copyright © 2020-2023  润新知