题目链接

题意:每个文本串的出现次数

分析:入门题,注意重复的关键字算不同的关键字,还有之前加过的清零。   新模板,加上last跑快一倍

#include <bits/stdc++.h>struct AC {static const int NODE = 10000 * 50 + 5;static const int SIZE = 26;int ch[NODE][SIZE], fail[NODE], last[NODE];int end[NODE];int sz;void clear() {memset (ch[0], 0, sizeof (ch[0]));end[0] = 0;sz = 1;}int idx(char ch) {return ch - 'a';}void insert(char *str) {int u = 0;for (int c, i=0; str[i]; ++i) {c = idx (str[i]);if (!ch[u][c]) {memset (ch[sz], 0, sizeof (ch[sz]));end[sz] = 0;ch[u][c] = sz++;}u = ch[u][c];}end[u]++;}void build() {fail[0] = 0;std::queue<int> que;for (int c=0; c<SIZE; ++c) {int u = ch[0][c];if (u) {fail[u] = 0;last[u] = 0;que.push (u);}}while (!que.empty ()) {int r = que.front (); que.pop ();for (int c=0; c<SIZE; ++c) {int u = ch[r][c];if (!u) {ch[r][c] = ch[fail[r]][c];} else {fail[u] = ch[fail[r]][c];last[u] = end[fail[u]] ? fail[u] : last[fail[u]];que.push (u);}}}}int query(char *text) {int ret = 0, u = 0;for (int c, i=0; text[i]; ++i) {c = idx (text[i]);u = ch[u][c];int t = u;while (t) {ret += end[t];end[t] = 0;t = last[t];}}return ret;}
};
AC ac;
char p[55], t[1000010];int main(void)    {     //HDOJ 2222 Keywords Searchint T;  scanf ("%d", &T);while (T--) {int n;   scanf ("%d", &n);ac.clear ();for (int i=1; i<=n; ++i)    {scanf ("%s", p);    ac.insert (p);}ac.build ();    scanf ("%s", t);printf ("%d\n", ac.query (t));}return 0;
}

转载于:https://www.cnblogs.com/Running-Time/p/4737729.html

AC自动机 HDOJ 2222 Keywords Search相关推荐

  1. HDU 2222 Keywords Search (AC自动机模板题)

    一组数据: 1 3 sss sss sss sss ans:3 #include <cstdio> #include <cstdlib> #include <vector ...

  2. hdu 2222 Keywords Search(ac自动机)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意:给你一系列子串,再给你一个主串问你主串一共有几个匹配子串 原来使用字典树写的但数据有点大T ...

  3. hdu 2222 Keywords Search AC自动机——多串匹配

    http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意: 给出n个单词,再给出一段包含m个字符的文章,求有多少个单词在文章里出现过. 思路: 才开开始以为简 ...

  4. HDU - 2222 Keywords Search(AC自动机)

    题目链接:点击查看 题目大意:给出n个长度不超过50的模式串,再给出一个长度不超过1e6的主串,问模式串在主串中出现过多少次 题目分析:一开始我以为是求n次KMP,后来才知道这样做的时间复杂度是O(L ...

  5. hdu 2222 Keywords Search ac自己主动机

    点击打开链接题目链接 Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  6. hdu 2222:Keywords Search

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submissi ...

  7. HDU 2222 Keywords Search【ACAM】

    HDU 2222 Kerwords Search 代码风格模仿自:USETC每周算法讲解,AC自动机,郭老师! 输入一个T,对于每一个T给你一个n,接下来输入P个模式串,然后给你一个L串,L中出现了多 ...

  8. AC自动机 HDOJ 5384 Danganronpa

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

  9. AC自动机 HDU 2222

    AC自动机分为三部分: 1.构造字典树 2.构找失败指针 3.匹配 解决的问题: 如给你n个单词,然后一篇问章,问你这篇文章中单词出现了多少次? View Code /* 程序说明:多模式串匹配的AC ...

最新文章

  1. 隐藏表白图“我喜欢你”就像你看不见但它也依然存在
  2. python读取.edf文件
  3. Objective-C语言中对象相等性与指针相等分析。
  4. asp.net使用easyUI 前后台数据交互
  5. 产品经理提升修炼的方法
  6. 推荐系统去偏(Debiased Recommendation)研究进展概述
  7. 【自适应盲均衡9】基于判决反馈的多径衰落信道的盲均衡与MATLAB仿真(CMA-DFE)
  8. 栈与队列在SGI STL的底层实现
  9. 苹果挂端口方法_调音台变身直播声卡的方法
  10. Lucene.Net 2.3.1开发介绍 —— 二、分词(五)
  11. Microsoft Edge 83 稳定版发布
  12. win10运行YOLOv4+OPENCV+VS2017
  13. 将php分页类YII绑定框架,就需要改变风格的基础
  14. 怎么学习PLC技术?
  15. 马斯克:让我成功的其实是工程思维
  16. Android 手表WearOs 禁止滑动返回、监听滑动事件分发
  17. waf指纹识别工具WAFW00F的使用
  18. 业务流程管理(BPM)系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 天猫整站Springboot 从零开始搭建(四(2,3))——后台分类管理功能开发
  20. 一起认识国产又好用的uni-app

热门文章

  1. 软件测试面试-在工作中功能,接口,性能,自动化的占比是多少?
  2. oracle11 分配表权限,Oracle11g权限--角色
  3. python爬虫框架学习_学习Python爬虫必备框架:Scrapy
  4. 电脑分辨率是什么_吵翻天的2K、3K、4K屏到底是什么鬼?
  5. python调用函数获取最开始的异常_Python使用sys.exc_info()方法获取异常信息
  6. check whether edge in face indices.
  7. 计算机系统制造时间成本,如何构建计算机成本核算系统.doc
  8. 一个完整的pytorch预训练实现图像分类,模型融合
  9. oracle有几种类型表空间,oracle 数据创建时如何指定表空间类型
  10. 炮姐ed计算机谱子,炮姐来了!《科学超电磁炮T》正式PV公开 1月开播_游侠网 Ali213.net...