题意:
     给你一些模式串,然后给你一些提问,每个提问是给你一个串,问你这个串在上
面的模式串中出现的次数。


思路:

      一开始想到hash,但是因为用的是map,所以超时了,map的操作是有代价的,他本身还会排序的,所以超时了,想用vec结果还没弄出来这个类型hash["aaa"] = 1,最后只能字典树了,先想下字典树,字典树处理前缀的出现的次数的时候非常拿手的,对于这个题目,我们可以把每个串都拆开,拆成一个一个的,然后在把他们加在树里面,这样就OK了,还有一个关键的地方,就是比如拆这个串 aa 可以拆成 a ,a ,aa,所以我们要在第一个a的时候只累加一次,怎么做到呢,可以在Tree的结构体里面在开个变量,标记当前这个字母最后一次是被谁更新的,如果是自己,那么就不会V++.


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct Tree
{Tree *next[26];int v ,mk;
}Tree;Tree root;void Buid_Tree(char *str ,int mkk)
{int len = strlen(str);Tree *p = &root ,*q;for(int i = 0 ;i < len ;i ++){int id = str[i] - 'a';if(p -> next[id] == NULL){q = (Tree *) malloc(sizeof(root));q -> v = 1;q -> mk = mkk;for(int j = 0 ;j < 26 ;j ++)q -> next[j] = NULL;p -> next[id] = q;p = p -> next[id];}else{p = p -> next[id];if(p -> mk != mkk) p -> v ++;p -> mk = mkk;}}
}int Find(char *str)
{int len = strlen(str);Tree *p = &root;for(int i = 0 ;i < len ;i ++){int id = str[i] - 'a';p = p -> next[id];if(p == NULL) return 0;}return p -> v;
}int main ()
{char str[25];int n ,m ,i;while(~scanf("%d" ,&n)){for(i = 0 ;i < 26 ;i ++)root.next[i] = NULL;for(i = 1 ;i <= n ;i ++){scanf("%s" ,str);int len = strlen(str) - 1;for(int ii = 0 ;ii <= len ;ii ++){char now[25];for(int jj = 0 ;jj + ii <= len ;jj ++){now[jj] = str[ii + jj];now[jj+1] = '\0';Buid_Tree(now ,i);}}}scanf("%d" ,&m);for(i = 1 ;i <= m ;i ++){scanf("%s" ,str);printf("%d\n" ,Find(str));}}return 0;
}

hdu2846 字典树(带id的)相关推荐

  1. CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)

    题目链接:点击查看 题目大意:给出 nnn 个点,任意两个点之间的边权为 ai⊕aja_i\oplus a_jai​⊕aj​,求最小生成树 题目分析:去年多校写过一样的模型,再拿出来写一遍回顾一下:牛 ...

  2. HDU 5687 Problem C 字典树

    Problem C Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  3. 字典树从第i个构造HDU2846

    http://www.cnblogs.com/ziyi--caolu/archive/2012/12/13/2816279.html  (参考) 附我的代码: /****HDU2846*构造 字典树 ...

  4. hdu2846(字典树)

    http://acm.hdu.edu.cn/showproblem.php?pid=2846 思路:题目属于判断字符串中是否包含子串的问题,对于一般的字典树,用来判断前缀,而这里不能直接这么去建树.在 ...

  5. hdu2846(2009多校第四场) 字典树

    明明就是个简单的字典树,我不过就是想复习一下尼玛被自己坑死了T^T 把字符串分解那儿写错了,检查了半天没找到错误,然后以为被卡数组内存,难过的学习字典树的指针写法.. 发现还是不对,大半夜突然看到自己 ...

  6. CodeForeces 842d Vitya and Strange Lesson ——(带lazy标记的01字典树)

    给一个序列,每次操作对这个序列中的所有数异或一个x,问每次操作完以后整个序列的mex值. 做法是去重后构建01字典树,异或x就是对root加一个x的lazy标志,每次pushDown时如果lazy的这 ...

  7. 字符串处理——字典树

    [概述] 字典树,又称为单词查找树,Tire 树,是一种树形结构,它是哈希树的变种. 字典树与字典很相似,当要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,说明字典 ...

  8. 字典树与01字典树详解

    [镇楼]   不满足于粗浅的表面了解字典树吗,今天!由我给大家带来!字典树与01字典树的解析!! 目录 [引入] [字典树] [01字典树] [引用参考] [引入] 字典是干啥的?查找字的.那么字典树 ...

  9. NEUOJ 711 (字典树)

    题目链接:点击这里 Problem: 异星工厂 Time limit: 2s Mem limit: 1000 MB AC/Submission: 19/111 Discuss Problem Desc ...

最新文章

  1. 微调Faster-R-CNN-InceptionV2完成高准确率安全帽检测任务
  2. 《关键对话》读书笔记作文3700字
  3. 标识人脸程序matlab,Matlab人脸识别基础源程序
  4. ajax接受的格式,关于ajax接受json格式的数据
  5. 程序员谈谈我的职场观(一)
  6. 大前端的自动化工厂(2)—— SB Family
  7. 2021高考文科成绩怎样查询,2021年本科分数线是多少?如何查询分数
  8. python和c先学哪个-初学者python和c语言先学哪个好呢?
  9. Spring的注解和装配实现IOC
  10. dosbox运行C语言,[转载]dosbox的使用方法
  11. Tbase 源码 (三)
  12. Excel 公式学习笔记:分数排名 + 评级
  13. mysql dump 2013_mysqldump 错误2013 Lost connection
  14. c语言错误:error C2018: unknown character '0xa3'
  15. pycocotools and mmpycocotools 循环报错
  16. 高通SDX12:Keypad按键相关(PowerKey、Reset)
  17. android批量上传图片(模仿QQ空间和微信发表说说)
  18. JAVA时间存储类Period和Duration
  19. 自学编程,我该如何寻找自学资源?(含视频)
  20. 怎么制作AI绘画?学会这几个技巧就能制作AI绘画

热门文章

  1. 也许这就是一种技术成就梦想的理解吧
  2. 物联网处理器定义混沌不明,市场尚未成熟
  3. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python
  4. Programming Pearls: Chatper3 Problem6 [Form letter generator]
  5. Linux入侵类问题排查思路
  6. (3)数据库的建立和数据表的操作
  7. 解决Maven报Plugin execution not covered by lifecycle configuration (转载)
  8. hdu6165(拓扑排序+tarjan缩点)
  9. webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server
  10. Intelij IDEA 2016.3安装mybatis插件并激活教程