题目背景

通过套取数据而直接“打表”过题者,是作弊行为,发现即棕名。

这是一道简单的AC自动机模板题。

用于检测正确性以及算法常数。

为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交。

管理员提示:本题数据内有重复的单词,且重复单词应该计算多次,请各位注意

题目描述

给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过。

输入格式

第一行一个n,表示模式串个数;

下面n行每行一个模式串;

下面一行一个文本串。

输出格式

一个数表示答案

输入输出样例

输入 #1复制

2
a
aa
aa

输出 #1复制

2

说明/提示

subtask1[50pts]:∑length(模式串)<=10^6,length(文本串)<=10^6,n=1;

subtask2[50pts]:∑length(模式串)<=10^6,length(文本串)<=10^6;

这难度算简单版???我已经不想做加强版了

所以可以简单的理解为将KMP放在Trie树上。

注意如果每次跳fail边复杂度过高,一次存储完可以进行优化。

这样的AC自动机就成为了Trie图。

不懂Trie图的自行百度(我也是自学了40分钟才搞懂,感觉整个人要炸了)

友情链接:https://www.cnblogs.com/cmmdc/p/7337611.html

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int n,ch[5000005][30];int t,f[5000005],next[5000005];char s[1000005];inline void add(){int len=strlen(s+1),hhh=1;for(int i=1;i<=len;i++){int u=s[i]-'a';if(!ch[hhh][u]){ch[hhh][u]=++t;}hhh=ch[hhh][u];}f[hhh]++;
}
queue<int>q;inline void getnext(){for(int i=0;i<26;i++)ch[0][i]=1;next[1]=0;q.push(1);while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<26;i++){int u=ch[x][i];if(!u){ch[x][i]=ch[next[x]][i];}else{int p=next[x];q.push(u);next[u]=ch[p][i];}}}
}inline int find(){int len=strlen(s+1);int i=1,hhh=1,q,w,ans=0;while(i<=len){q=s[i]-'a';w=ch[hhh][q];while(w>1){if(f[w]==-1){break;}ans+=f[w];f[w]=-1;w=next[w];}hhh=ch[hhh][q];i++;}return ans;
}
int main(){scanf("%d",&n);t=1;for(int i=1;i<=n;i++){scanf("%s",s+1);add();}getnext();scanf("%s",s+1);printf("%d\n",find());return 0;
} 

转载于:https://www.cnblogs.com/hrj1/p/11135456.html

【模板】AC自动机(简单版)相关推荐

  1. 模板 - AC自动机

    ACM-ICPC模板 目录 求有多少个模式串在文本串里出现过 建fail树dfs求每个模式串在文本串中的出现次数 ac自动机fail树上dfs序建可持久化线段树 AC自动机是一种多模匹配算法 AC自动 ...

  2. POJ 1625 Censored!(AC自动机-指针版+DP+大数)题解

    题目:给你n个字母,p个模式串,要你写一个长度为m的串,要求这个串不能包含模式串,问你这样的串最多能写几个 思路:dp+AC自动机应该能看出来,万万没想到这题还要加大数...orz 状态转移方程dp[ ...

  3. HDU 2222 ACAM模板(AC自动机)

    这里找到了两篇很nice的Trie树(作者Hackbuteer1)以及AC自动机(作者niushuai666)入门详解.博主写的可以说是非常用心了,一看就懂. 题意:给出N(<=10000)个单 ...

  4. ac自动机 匹配最长前缀_AC自动机算法

    AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包 ...

  5. 提高篇 第二部分 字符串算法 第4章 AC自动机

    https://blog.csdn.net/wangyh1008/article/details/81428056 [模板]AC自动机(加强版) 洛谷3796 AC自动机_A_loud_name-CS ...

  6. [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ

    前言 做过杭电.浙大或是北大等ACM题库的人一定对"刷题"不陌生,以杭电OJ为例:首先打开首页(http://acm.hdu.edu.cn/),然后登陆,接着找到"Onl ...

  7. luogu P3808 【模板】AC自动机(简单版)

    二次联通门 : luogu P3808 [模板]AC自动机(简单版) /*luogu P3808 [模板]AC自动机(简单版)手速越来越快了10分钟一个AC自动机一遍过编译 + 一边AC感觉不错我也就 ...

  8. P3808,P3796-[模板]AC自动机(简单版/加强版)

    简单版 题目链接: https://www.luogu.org/problem/P3808 题目大意 nnn个模式串,一个文本串,求有多少个模式串出现在文本串里. 解题思路 普通ACACAC自动机不解 ...

  9. luogu P3796【模板】AC自动机(加强版)

    嘟嘟嘟 这个和某谷的AC自动机模板简单版差不多. 但还是要注意几点的: 1.这个是统计出现次数,而不是是否出现,所以在查询的时候加上这个节点的val后,不能把val标记为-1.那么也就可以说查询的时间 ...

最新文章

  1. 解决博客园模版错误排版的一个问题
  2. Ubuntu 使用phpmyadmin,报错#1146 - Table ‘phpmyadmin.pma_table_uiprefs' doesn't exist
  3. llvm编译linux,在Linux上编译LLVM/Clang 8.0.0等全部源代码
  4. iOS之 开发常用到的宏定义
  5. 行列转换的帖子mysql_[转载]mysql行列转换方法总结  (转)
  6. windows下SBT的安装与使用
  7. 利用php百马百担_百鸡百钱===百马百担====for循环嵌套
  8. 读书笔记_中国期货市场量化交易(李尉)04
  9. LeetCode解题思路—区间合并
  10. Python+数据分析+机器学习,数据科学家最少必要知识库!
  11. android测试云模拟器,基于Android模拟器的调研
  12. 计算机前景和需求,计算机类专业薪资排行:这6个收入更高,发展前景和就业需求很大...
  13. 计算机科学感言,计算机专业学生毕业感言
  14. uni-app的video禁止快进及seek()上的小坑
  15. 重来之大学版|学习篇-为什么要学习?为什么要终身学习?别一上来就“费曼学习法”,先学习学习再学习
  16. 关于开机自启动qbo服务的讨论
  17. Android 高德地图——地图模拟导航
  18. .vscode/extensions下放的是插件
  19. keras入门实例:非线性拟合求拟合系数
  20. 一号店静态html源代码,一号店html模板

热门文章

  1. 多次Jquery引发head.insertBefore( script, head.firstChild );
  2. 输入有序数组返回下标
  3. 《Head First Servlets JSP(中文版)》书摘
  4. 【快乐水题】677. 键值映射
  5. update语句的返回值是什么
  6. Redis缓存穿透、击穿、雪崩、预热、更新、降级
  7. 原子操作的实现原理(锁和循环CAS)
  8. mkimage工具讲解
  9. zcmu-1646 盒子游戏
  10. 汇编语言EQU伪指令