【模板】AC自动机(简单版)
题目背景
通过套取数据而直接“打表”过题者,是作弊行为,发现即棕名。
这是一道简单的AC自动机模板题。
用于检测正确性以及算法常数。
为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交。
管理员提示:本题数据内有重复的单词,且重复单词应该计算多次,请各位注意
题目描述
给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过。
输入格式
第一行一个n,表示模式串个数;
下面n行每行一个模式串;
下面一行一个文本串。
输出格式
一个数表示答案
输入输出样例
2 a aa aa
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自动机(简单版)相关推荐
- 模板 - AC自动机
ACM-ICPC模板 目录 求有多少个模式串在文本串里出现过 建fail树dfs求每个模式串在文本串中的出现次数 ac自动机fail树上dfs序建可持久化线段树 AC自动机是一种多模匹配算法 AC自动 ...
- POJ 1625 Censored!(AC自动机-指针版+DP+大数)题解
题目:给你n个字母,p个模式串,要你写一个长度为m的串,要求这个串不能包含模式串,问你这样的串最多能写几个 思路:dp+AC自动机应该能看出来,万万没想到这题还要加大数...orz 状态转移方程dp[ ...
- HDU 2222 ACAM模板(AC自动机)
这里找到了两篇很nice的Trie树(作者Hackbuteer1)以及AC自动机(作者niushuai666)入门详解.博主写的可以说是非常用心了,一看就懂. 题意:给出N(<=10000)个单 ...
- ac自动机 匹配最长前缀_AC自动机算法
AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包 ...
- 提高篇 第二部分 字符串算法 第4章 AC自动机
https://blog.csdn.net/wangyh1008/article/details/81428056 [模板]AC自动机(加强版) 洛谷3796 AC自动机_A_loud_name-CS ...
- [C#] 逆袭——自制日刷千题的AC自动机攻克HDU OJ
前言 做过杭电.浙大或是北大等ACM题库的人一定对"刷题"不陌生,以杭电OJ为例:首先打开首页(http://acm.hdu.edu.cn/),然后登陆,接着找到"Onl ...
- luogu P3808 【模板】AC自动机(简单版)
二次联通门 : luogu P3808 [模板]AC自动机(简单版) /*luogu P3808 [模板]AC自动机(简单版)手速越来越快了10分钟一个AC自动机一遍过编译 + 一边AC感觉不错我也就 ...
- P3808,P3796-[模板]AC自动机(简单版/加强版)
简单版 题目链接: https://www.luogu.org/problem/P3808 题目大意 nnn个模式串,一个文本串,求有多少个模式串出现在文本串里. 解题思路 普通ACACAC自动机不解 ...
- luogu P3796【模板】AC自动机(加强版)
嘟嘟嘟 这个和某谷的AC自动机模板简单版差不多. 但还是要注意几点的: 1.这个是统计出现次数,而不是是否出现,所以在查询的时候加上这个节点的val后,不能把val标记为-1.那么也就可以说查询的时间 ...
最新文章
- 解决博客园模版错误排版的一个问题
- Ubuntu 使用phpmyadmin,报错#1146 - Table ‘phpmyadmin.pma_table_uiprefs' doesn't exist
- llvm编译linux,在Linux上编译LLVM/Clang 8.0.0等全部源代码
- iOS之 开发常用到的宏定义
- 行列转换的帖子mysql_[转载]mysql行列转换方法总结 (转)
- windows下SBT的安装与使用
- 利用php百马百担_百鸡百钱===百马百担====for循环嵌套
- 读书笔记_中国期货市场量化交易(李尉)04
- LeetCode解题思路—区间合并
- Python+数据分析+机器学习,数据科学家最少必要知识库!
- android测试云模拟器,基于Android模拟器的调研
- 计算机前景和需求,计算机类专业薪资排行:这6个收入更高,发展前景和就业需求很大...
- 计算机科学感言,计算机专业学生毕业感言
- uni-app的video禁止快进及seek()上的小坑
- 重来之大学版|学习篇-为什么要学习?为什么要终身学习?别一上来就“费曼学习法”,先学习学习再学习
- 关于开机自启动qbo服务的讨论
- Android 高德地图——地图模拟导航
- .vscode/extensions下放的是插件
- keras入门实例:非线性拟合求拟合系数
- 一号店静态html源代码,一号店html模板