【HDOJ 5384】Danganronpa
【HDOJ 5384】Danganronpa
AC自己主动机。
。。
当时感觉用字典树 标神也往自己主动机想来着。。手太生加上时间紧迫也没敲……回来一看题解什么AB同一时候建自己主动机。。。顿时愣了 什么叫同一时候建= =问了问財神说普通自己主动机。
。
。B串单建 立刻疯了……这不就是模板题么。。
。 B串建自己主动机 A串枚举查询 写完兴冲冲1T……立刻想法优化 建fail时压缩一下 查询时直接累计 不再循环找fail 171ms。。
。第二个自己主动机的题。。距上次蛮久了 这次一复习 感觉印象差点儿相同有了
代码(模板)例如以下:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>using namespace std;typedef struct Node
{int ch[26],cnt,fail;
}Node;Node tr[2600011];
char a[100001][10002];
int tp;int SetNode()
{memset(tr[tp].ch,-1,sizeof(tr[tp].ch));tr[tp].cnt = 0;return tp++;
}void Add(int site,char *str)
{int i,k;for(i = 0; str[i]; ++i){k = tr[site].ch[str[i] - 'a'];if(k == -1) tr[site].ch[str[i] - 'a'] = k = SetNode();site = k;}tr[site].cnt++;
}void Build_AC(int site)
{queue <int> q;q.push(site);int i,tmp;while(!q.empty()){site = q.front();q.pop();for(i = 0; i < 26; ++i){if(tr[site].ch[i] == -1) continue;if(!site) tr[tr[site].ch[i]].fail = 0;else{tmp = tr[site].fail;while(tmp && tr[tmp].ch[i] == -1) tmp = tr[tmp].fail;tr[tr[site].ch[i]].fail = (tr[tmp].ch[i] == -1)? tmp: tr[tmp].ch[i];if(tr[tmp].ch[i] != -1) ///压缩计数器tr[tr[site].ch[i]].cnt += tr[tr[tmp].ch[i]].cnt;}q.push(tr[site].ch[i]);}}
}int Search(int site,char *str)
{int i,k,ans = 0;for(i = 0; str[i]; ++i){k = str[i] - 'a';while(site && tr[site].ch[k] == -1) site = tr[site].fail;if(tr[site].ch[k] != -1) site = tr[site].ch[k];ans += tr[site].cnt;}return ans;
}int main()
{int t,na,nb,i;char str[100005];scanf("%d",&t);while(t--){scanf("%d %d",&na,&nb);tp = 0;SetNode();for(i = 0; i < na; ++i){scanf("%s",a[i]);}while(nb--){scanf("%s",str);Add(0,str);}Build_AC(0);for(i = 0; i < na; ++i){printf("%d\n",Search(0,a[i]));}}return 0;
}
转载于:https://www.cnblogs.com/yutingliuyl/p/7039236.html
【HDOJ 5384】Danganronpa相关推荐
- 【HDOJ 3652】B-number
[HDOJ 3652]B-number 给一整数n 找<=n的整数中能被13整除且含有13的 数位dp 记忆化! . 一入记忆化深似海. ..再也不想用递推了...发现真的非常好想 仅仅要保证满 ...
- 【HDOJ 4970】 Killing Monsters
[HDOJ 4970] Killing Monsters 数据很大 立马想预处理 每只怪物会从点x出现移动到点n(终点) 问能剩几只怪物 预处理求出每个位置到终点所受伤害 出现一只怪物直接判断死活即可 ...
- 【HDOJ 5399】Too Simple
[HDOJ 5399]Too Simple 函数映射问题 给出m函数 里面有0~m个函数未知(-1) 问要求最后1~n分别相应仍映射1~n 有几种函数写法(已给定的函数不可变 仅仅可更改未知的函数的映 ...
- 【HDOJ 3790】最短路径问题,Dijkstra最短路,双边权
problem 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- AC自动机 HDOJ 5384 Danganronpa
题目传送门 1 /* 2 题意:多个文本串,多个模式串在每个文本串出现的次数 3 AC自动机:这就是一道模板题,杭电有道类似的题目 4 */ 5 /************************** ...
- HDOJ 2046 骨牌铺方格 【递推】
HDOJ 2046 骨牌铺方格 [递推] 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2046 铺2*1只有一种情况(一竖) 2*2有两种情况(两横或 ...
- 【杭电】[4349]Xiao Ming's Hope
上次比赛问的是 杨辉三角第n行奇数的个数 和这个本质上是一样的 lucas定理的推广 参考了宇神的博客 hdoj 4349 Xiao Ming's Hope [lucas 推广] #include&l ...
- 【hdu 1848】Fibonacci again and again
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- 【阶段小结】协同开发——这学期的Git使用小结
[阶段小结]协同开发--这学期的Git使用小结 一.Git简介 1. Git简单介绍 2. Git工作流程以及各个区域 3. Git文件状态变化 二.Git安装&Git基本配置 三.个人踩坑 ...
最新文章
- poj 2362 Square
- Solaris下调整opt分区的inode结构
- IOCP之accept、AcceptEx、WSAAccept的区别
- scrapy详解及主要应用场景
- 手把手 docker 从零搭建 jenkins 服务器
- OpenGL Gouraud着色法的实例
- 石墨烯将是下一个万亿级别的产业,投资者该如何提前布局?
- Java 中判断连接Oracle数据库连接成功
- 华为最新全系列交换机命令手册、配置指南下载
- Java数组对象排序
- Unity项目捏脸解决方案BlendShape
- topgate镜像_[百度云盘]1678个PS1美版镜像(redump20110912)
- 短信网关协议(cmpp、sgip、smgp、smpp)长短信开发要点
- quill上传本地视频(保姆级教学)
- 统计多个渠道App下载量效果
- c语言打字游戏程序设计报告,打字游戏程序设计报告.doc
- linux下mv命令参数详解,linux下的mv命令使用详解
- Python获取文件的行数和某一行的内容
- IT人不仅要提升挣钱能力,更要拓展挣钱途径
- 【PowerDesigner】Powerbuilder 11.5破解方法