zoukankan      html  css  js  c++  java
  • poj3630||hdoj1671(字典树)

    题目链接:https://vjudge.net/problem/HDU-1671

    题意:给定n个字符串,判断是否存在一些字符串是另一些字符串的前缀。

    思路:

      套模板,存在前缀可能是两种情况:

        当前字符串枚举位数时已经存在之前的字符串了;(即已经存在911,当前插入9112)

          或者当前字符串枚举完之后,该结点还有子结点。(即已经存在9112,当前插入911)

    AC code:

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    const int maxn=1e6+5;
    int T,n,trie[maxn][12],key[maxn],cnt;
    int flag;
    char str[12];
    
    void insert(char *s){
        int len=strlen(s),u=0;
        for(int i=0;i<len;++i){
            int t=s[i]-'0';
            if(!trie[u][t]){
                ++cnt;
                memset(trie[cnt],0,sizeof(trie[cnt]));
                key[cnt]=0;
                trie[u][t]=cnt;
            }
            if(key[trie[u][t]]){
                flag=0;
                return;
            }
            u=trie[u][t];
            if(i==len-1) key[u]=1;
        }
        for(int i=0;i<10;++i)
            if(trie[u][i]){
                flag=0;
                break;
            }
    }
    
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d",&n);
            memset(trie[0],0,sizeof(trie[0]));
            flag=1,cnt=0;
            for(int i=0;i<n;++i){
                scanf("%s",str);
                if(flag) insert(str);
            }
            if(flag) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    MongoDB性能分析
    MongoDB复制
    redis键管理
    MySQL集群架构-DRBD+headbeat +lvs+keepalived
    Spark-Core RDD转换算子-双Value型交互
    Spark-Core RDD转换算子-Value型
    Spark-Core RDD的创建
    Spark-Core RDD概述
    数仓理论
    flume 进阶
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/11829478.html
Copyright © 2011-2022 走看看