hdu2846 字典树(带id的)
题意:
给你一些模式串,然后给你一些提问,每个提问是给你一个串,问你这个串在上
面的模式串中出现的次数。
思路:
一开始想到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的)相关推荐
- CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)
题目链接:点击查看 题目大意:给出 nnn 个点,任意两个点之间的边权为 ai⊕aja_i\oplus a_jai⊕aj,求最小生成树 题目分析:去年多校写过一样的模型,再拿出来写一遍回顾一下:牛 ...
- HDU 5687 Problem C 字典树
Problem C Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tota ...
- 字典树从第i个构造HDU2846
http://www.cnblogs.com/ziyi--caolu/archive/2012/12/13/2816279.html (参考) 附我的代码: /****HDU2846*构造 字典树 ...
- hdu2846(字典树)
http://acm.hdu.edu.cn/showproblem.php?pid=2846 思路:题目属于判断字符串中是否包含子串的问题,对于一般的字典树,用来判断前缀,而这里不能直接这么去建树.在 ...
- hdu2846(2009多校第四场) 字典树
明明就是个简单的字典树,我不过就是想复习一下尼玛被自己坑死了T^T 把字符串分解那儿写错了,检查了半天没找到错误,然后以为被卡数组内存,难过的学习字典树的指针写法.. 发现还是不对,大半夜突然看到自己 ...
- CodeForeces 842d Vitya and Strange Lesson ——(带lazy标记的01字典树)
给一个序列,每次操作对这个序列中的所有数异或一个x,问每次操作完以后整个序列的mex值. 做法是去重后构建01字典树,异或x就是对root加一个x的lazy标志,每次pushDown时如果lazy的这 ...
- 字符串处理——字典树
[概述] 字典树,又称为单词查找树,Tire 树,是一种树形结构,它是哈希树的变种. 字典树与字典很相似,当要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,说明字典 ...
- 字典树与01字典树详解
[镇楼] 不满足于粗浅的表面了解字典树吗,今天!由我给大家带来!字典树与01字典树的解析!! 目录 [引入] [字典树] [01字典树] [引用参考] [引入] 字典是干啥的?查找字的.那么字典树 ...
- NEUOJ 711 (字典树)
题目链接:点击这里 Problem: 异星工厂 Time limit: 2s Mem limit: 1000 MB AC/Submission: 19/111 Discuss Problem Desc ...
最新文章
- 微调Faster-R-CNN-InceptionV2完成高准确率安全帽检测任务
- 《关键对话》读书笔记作文3700字
- 标识人脸程序matlab,Matlab人脸识别基础源程序
- ajax接受的格式,关于ajax接受json格式的数据
- 程序员谈谈我的职场观(一)
- 大前端的自动化工厂(2)—— SB Family
- 2021高考文科成绩怎样查询,2021年本科分数线是多少?如何查询分数
- python和c先学哪个-初学者python和c语言先学哪个好呢?
- Spring的注解和装配实现IOC
- dosbox运行C语言,[转载]dosbox的使用方法
- Tbase 源码 (三)
- Excel 公式学习笔记:分数排名 + 评级
- mysql dump 2013_mysqldump 错误2013 Lost connection
- c语言错误:error C2018: unknown character '0xa3'
- pycocotools and mmpycocotools 循环报错
- 高通SDX12:Keypad按键相关(PowerKey、Reset)
- android批量上传图片(模仿QQ空间和微信发表说说)
- JAVA时间存储类Period和Duration
- 自学编程,我该如何寻找自学资源?(含视频)
- 怎么制作AI绘画?学会这几个技巧就能制作AI绘画
热门文章
- 也许这就是一种技术成就梦想的理解吧
- 物联网处理器定义混沌不明,市场尚未成熟
- 红薯因 Swift 重写开源中国失败,貌似欲改用 Python
- Programming Pearls: Chatper3 Problem6 [Form letter generator]
- Linux入侵类问题排查思路
- (3)数据库的建立和数据表的操作
- 解决Maven报Plugin execution not covered by lifecycle configuration (转载)
- hdu6165(拓扑排序+tarjan缩点)
- webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server
- Intelij IDEA 2016.3安装mybatis插件并激活教程