• 字典树(codevs 4189)


    4189 字典

     

     时间限制: 1 s
     空间限制: 256000 KB
     题目等级 : 大师 Master
     
     
    题目描述 Description

    最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000)

    现在skyzhong需要在字典里查询以某一段字母开头的单词

    如:skyzhong想查询a

    那么只要是a开头的单词就可以了

    skyzhong只想知道里面有没有这一个单词(因为没有他就不查了)

    若有,请输出YES。若没有,请输出NO

    输入描述 Input Description

    第一行一个数n

    第二行到第n+1行,一行一个字符串

    再下一行一个数m,表示skyzhong想要查询的次数

    接着m行,一行一个字符串,表示skyzhong想要查的东西

    输出描述 Output Description

    共m行,若有这字串输出YES,否则输出NO

    样例输入 Sample Input

    3

    asd

    asfdghj

    asfd

    3

    asd

    asdghj

    asf

    样例输出 Sample Output

    YES

    NO

    YES

    数据范围及提示 Data Size & Hint

    字符串只有小写字母,且长度≤8

    /*
      trie tree的储存方式:将字母储存在边上,边的节点连接与它相连的字母 
      trie[rt][x]=tot:rt是上个节点编号,x是字母,tot是下个节点编号 
    */ 
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #define maxn 2000010
    using namespace std;
    int tot=1,n;
    int trie[maxn][26];
    //bool isw[maxn];
    void insert(char *s,int rt)
    {
        for(int i=0;s[i];i++)
        {
            int x=s[i]-'a';
            if(trie[rt][x]==0)//现在插入的字母在之前同一节点处未出现过 
            {
                trie[rt][x]=++tot;//字母插入一个新的位置,否则不做处理 
            }
            rt=trie[rt][x];//为下个字母的插入做准备  
        }
        /*isw[rt]=true;标志该单词末位字母的尾结点,在查询整个字母时用到*/
    }
    bool find(char *s,int rt)
    {
        for(int i=0;s[i];i++)
        {
            int x=s[i]-'a';
            if(trie[rt][x]==0)return false;//以rt为头结点的x字母不存在,返回0 
            rt=trie[rt][x];//为查询下个字母做准备 
        }
        return true;
        //查询整个单词时,应该return isw[rt] 
    }
    char s[22];
    int main()
    {
        tot=0;
        int rt=1;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            cin>>s;
            insert(s,rt);
        }
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            cin>>s;
            if(find(s,rt))printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    Java中变量的使用规则
    Java中的数据类型
    如何命名Java变量
    thinkphp3.2 验证码生成和点击刷新验证码
    workerman
    jorgchart,帮助你生成组织结构图的
    PHP代码获取客户端IP地址经纬度及所在城市
    百度API城市代码CityCode官方文档
    自定义过滤器
    内置过滤器
  • 原文地址:https://www.cnblogs.com/harden/p/5579444.html
Copyright © 2020-2023  润新知