zoukankan      html  css  js  c++  java
  • codevs 4189 字典

                                codevs 4189 字典

    题目描述 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

    题解:

    #include<map>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    map<string ,int>W;
    int n,m,len;
    char s[200];
    int main() {
        cin>>n;
        for(int i=1; i<=n; i++) {
            cin>>s;
            len=strlen(s);
            for(int i=len; i>=1; i--) {
                s[i]='';
                W[s]++;
            }
        }
        cin>>m;
        for(int i=1; i<=m; i++) {
            cin>>s;
            if(W[s]!=0) cout<<"YES
    ";
            else cout<<"NO
    ";
        }
        return 0;
    }
    map水过
    #include<cstdio>
    #include<cstring>
    struct node {
        int c[27];
    } a[1000005];
    int n,m,now;
    int main() {
        int tn=1;
        for(int i=1; i<=26; i++) a[1].c[i]=0;
        scanf("%d",&n);
        for(int i=1; i<=n; i++) {
            char s[9];
            scanf("%s",s);
            now=1;
            for(int j=0; j<strlen(s); j++) {
                int v=(int)(s[j]-96);
                if(a[now].c[v]>0) now=a[now].c[v];
                else {
                    tn++;
                    for(int l=1; l<=26; l++) a[tn].c[l]=0;
                    a[now].c[v]=tn;
                    now=tn;
                }
            }
        }
        scanf("%d",&m);
        for(int ii=1; ii<=m; ii++) {
            char s[9];
            scanf("%s",s);
            now=1;
            bool flag=true;
            for(int i=0; i<strlen(s); i++) {
                int v=(int)(s[i]-96);
                if(a[now].c[v]>0) now=a[now].c[v];
                else {
                    flag=false;
                    printf("NO
    ");
                    break;
                }
            }
            if(flag==true) printf("YES
    ");
        }
    }
    View Code

    人只有一辈子,只要你喜欢的人幸福一辈子,又何尝不可

  • 相关阅读:
    屌丝的出路:拼命工作!
    Collections.sort自定义排序的使用方法
    oracle 导入/导出遇到的 问题总结
    JDBC更新10W级以上数据性能优化
    中国特色程序员美好生活出路
    正则表达式的一些基础语法
    Java常用容器类学习总结
    从 ASP.NET 服务器控件插入客户端脚本(转自MSDN)
    ASP.NET Web Page应用深入探讨(强烈建议开发web的人学习)
    剖析 .Net 下的数据访问层技术(转)
  • 原文地址:https://www.cnblogs.com/GTBD/p/9223293.html
Copyright © 2011-2022 走看看