【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相关推荐

  1. 【HDOJ 3652】B-number

    [HDOJ 3652]B-number 给一整数n 找<=n的整数中能被13整除且含有13的 数位dp 记忆化! . 一入记忆化深似海. ..再也不想用递推了...发现真的非常好想 仅仅要保证满 ...

  2. 【HDOJ 4970】 Killing Monsters

    [HDOJ 4970] Killing Monsters 数据很大 立马想预处理 每只怪物会从点x出现移动到点n(终点) 问能剩几只怪物 预处理求出每个位置到终点所受伤害 出现一只怪物直接判断死活即可 ...

  3. 【HDOJ 5399】Too Simple

    [HDOJ 5399]Too Simple 函数映射问题 给出m函数 里面有0~m个函数未知(-1) 问要求最后1~n分别相应仍映射1~n 有几种函数写法(已给定的函数不可变 仅仅可更改未知的函数的映 ...

  4. 【HDOJ 3790】最短路径问题,Dijkstra最短路,双边权

    problem 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  5. AC自动机 HDOJ 5384 Danganronpa

    题目传送门 1 /* 2 题意:多个文本串,多个模式串在每个文本串出现的次数 3 AC自动机:这就是一道模板题,杭电有道类似的题目 4 */ 5 /************************** ...

  6. HDOJ 2046 骨牌铺方格 【递推】

    HDOJ 2046 骨牌铺方格 [递推] 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2046 铺2*1只有一种情况(一竖) 2*2有两种情况(两横或 ...

  7. 【杭电】[4349]Xiao Ming's Hope

    上次比赛问的是 杨辉三角第n行奇数的个数 和这个本质上是一样的 lucas定理的推广 参考了宇神的博客 hdoj 4349 Xiao Ming's Hope [lucas 推广] #include&l ...

  8. 【hdu 1848】Fibonacci again and again

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  9. 【阶段小结】协同开发——这学期的Git使用小结

    [阶段小结]协同开发--这学期的Git使用小结 一.Git简介 1. Git简单介绍 2. Git工作流程以及各个区域 3. Git文件状态变化 二.Git安装&Git基本配置 三.个人踩坑 ...

最新文章

  1. poj 2362 Square
  2. Solaris下调整opt分区的inode结构
  3. IOCP之accept、AcceptEx、WSAAccept的区别
  4. scrapy详解及主要应用场景
  5. 手把手 docker 从零搭建 jenkins 服务器
  6. OpenGL Gouraud着色法的实例
  7. 石墨烯将是下一个万亿级别的产业,投资者该如何提前布局?
  8. Java 中判断连接Oracle数据库连接成功
  9. 华为最新全系列交换机命令手册、配置指南下载
  10. Java数组对象排序
  11. Unity项目捏脸解决方案BlendShape
  12. topgate镜像_[百度云盘]1678个PS1美版镜像(redump20110912)
  13. 短信网关协议(cmpp、sgip、smgp、smpp)长短信开发要点
  14. quill上传本地视频(保姆级教学)
  15. 统计多个渠道App下载量效果
  16. c语言打字游戏程序设计报告,打字游戏程序设计报告.doc
  17. linux下mv命令参数详解,linux下的mv命令使用详解
  18. Python获取文件的行数和某一行的内容
  19. IT人不仅要提升挣钱能力,更要拓展挣钱途径
  20. 【PowerDesigner】Powerbuilder 11.5破解方法

热门文章

  1. 前端神器avalonJS入门(二)
  2. android实现类似于支付宝余额快速闪动的效果
  3. Linux下安装G++
  4. centos自启动脚本
  5. KlayGE 4.0中Deferred Rendering的改进(四):GI的神话
  6. 验证中文的正则表达式
  7. ECharts - 地图
  8. Vue.js not detected
  9. (技能篇)Mysql在linux下的全量热备份
  10. Chapter6 Commodity Forwards