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

  1. //字典字典字典树
  2. //用指针写真好啊,好写还容易理解。(就是别忘了更新指针!!卡死我了!)
  3. #include<iostream>
  4. #include<cstdio>
  5. #include<cstring>
  6.  
  7. using namespace std;
  8. int n,m;
  9. char s[];
  10. struct trie
  11. {
  12. trie *next[];
  13. }*root;
  14.  
  15. trie *cr()
  16. {
  17. trie *pt=new trie;
  18. memset(pt->next,,sizeof pt->next);
  19. return pt;
  20. }
  21.  
  22. void insert(char *word)//插入单词
  23. {
  24. trie *p=root;
  25. char *q=word;
  26. while(*q)
  27. {
  28. int id=*q-'a';
  29. if(p->next[id]==NULL)
  30. p->next[id]=cr();
  31. p=p->next[id];
  32. q++;
  33. }
  34. }
  35.  
  36. bool search(char *word)
  37. {
  38. trie *p=root;
  39. char *q=word;
  40. int now=;
  41. while(*q)
  42. {
  43. int id=*q-'a';
  44. if(p->next[id])
  45. {
  46. q++;
  47. p=p->next[id];//更新指针AAAA!
  48. continue;//能找到就继续
  49. }
  50. return false;
  51. }
  52. return true;
  53. }
  54.  
  55. int main()
  56. {
  57. scanf("%d",&n);
  58. root=cr();
  59. for(int i=;i<=n;i++)
  60. {
  61. scanf("%s",s);
  62. insert(s);
  63. }
  64. scanf("%d",&m);
  65. for(int i=;i<=m;i++)
  66. {
  67. scanf("%s",s);
  68. if(search(s)) printf("YES\n");
  69. else printf("NO\n");
  70. }
  71. return ;
  72. }

心若向阳,无言悲伤

字典(Trie树)的更多相关文章

  1. 字典(trie)树--从入门到入土

    今天再来认识一个强大的数据结构. 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词 ...

  2. luogu P3065 first——trie树相关

    题目描述 Bessie has been playing with strings again. She found that by changing the order of the alphabe ...

  3. Hihicoder 题目1 : Trie树(字典树,经典题)

    题目1 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编 ...

  4. 字典树(Trie树)的实现及应用

    >>字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树.与二叉查找树不同,Trie树的 ...

  5. [转载]字典树(trie树)、后缀树

    (1)字典树(Trie树) Trie是个简单但实用的数据结构,通常用于实现字典查询.我们做即时响应用户输入的AJAX搜索框时,就是Trie开始.本质上,Trie是一颗存储多个字符串的树.相邻节点间的边 ...

  6. Trie树也称字典树

    Trie树 Trie树也称字典树,因为其效率很高,所以在在字符串查找.前缀匹配等中应用很广泛,其高效率是以空间为代价的. 一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息, ...

  7. [POJ] #1002# 487-3279 : 桶排序/字典树(Trie树)/快速排序

    一. 题目 487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 274040   Accepted: 48891 ...

  8. Trie树(字典树) 最热门的前N个搜索关键词

    方法介绍 1.1.什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优 ...

  9. Trie树|字典树(字符串排序)

    有时,我们会碰到对字符串的排序,若采用一些经典的排序算法,则时间复杂度一般为O(n*lgn),但若采用Trie树,则时间复杂度仅为O(n). Trie树又名字典树,从字面意思即可理解,这种树的结构像英 ...

  10. 讲解——Trie树(字典树)

          Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看以下几个题: 1.给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单 ...

随机推荐

  1. 在Java中调用带参数的存储过程

    JDBC调用存储过程: CallableStatement 在Java里面调用存储过程,写法那是相当的固定: Class.forName(.... Connection conn = DriverMa ...

  2. 52.基于doc value正排索引的聚合内部原理

    主要知识点: 本节没有太懂,以后复习时补上       聚合分析的内部原理是什么????aggs,term,metric avg max,执行一个聚合操作的时候,内部原理是怎样的呢?用了什么样的数据结 ...

  3. https报错注销源文件内容

    open -a pycharm /Users/vivi/Library/Python/3.6/lib/python/site-packages/requests/packages/urllib3/co ...

  4. 热词解析(9) — hangry

    今天给大家介绍一个非常有趣.又超级实用的词!!中文叫"饿极而怒",英文叫... 不知道你有没有这样的经历,当你饿着肚子等着你妈做饭,结果你妈却在麻将桌上不下来,你就越来越饿,越饿越 ...

  5. jquery 选中设置的值

    select设置值为xxx选中:如下所示 $("#questionClass").val("xxx");

  6. cocos2dx 2.1.x 退出SDK相关界面后EGLView 不刷新渲染

    报错内容为: [3390:1456879] failed to call contextcocos2d: surface size: 0x0[3390:1456879] Failed to make ...

  7. [luoguP3203][HNOI2010]BOUNCE 弹飞绵羊(LCT)

    传送门 每个点都会跳到另一个点,连边就是一棵树. 更改弹力就是换边. 求一个点跳多少次跳到终点就是求这个点的深度,那么只需要维护 size 域,access(n + 1) 然后 splay(x),求 ...

  8. [luoguP2858] [USACO06FEB]奶牛零食Treats for the Cows(DP)

    传送门 f[i][j][k] 表示 左右两段取到 i .... j 时,取 k 次的最优解 可以优化 k 其实等于 n - j + i 则 f[i][j] = max(f[i + 1][j] + a[ ...

  9. 转载 - C++ - placement new

    出处:http://www.cnblogs.com/wanghetao/archive/2011/11/21/2257403.html 有关placement new                  ...

  10. Sliding Window(滑动窗口)

    Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 58002   Accepted: 16616 Case Time Limi ...