P5357 【模板】AC自动机(二次加强版)
非AC版,会T,待更新
#include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<cmath> #include<ctime> #include<set> #include<map> #include<stack> #include<cstring> #pragma GCC optimize(2) #define inf 2147483647 #define ls rt<<1 #define rs rt<<1|1 #define lson ls,nl,mid,l,r #define rson rs,mid+1,nr,l,r #define N 400010 #define For(i,a,b) for(int i=a;i<=b;++i) #define p(a) putchar(a) #define g() getchar()using namespace std; int n; char s[N],t[2000010]; int d[2000010]; namespace AC{int tr[N][26],tot;int cnt[N],fail[N],id[N],val[N];void insert(char *s,int ID){int u=0;for(int i=1;s[i];i++){if(!tr[u][s[i]-'a']) tr[u][s[i]-'a']=++tot;u=tr[u][s[i]-'a'];}if(id[u])d[id[u]]=ID;id[u]=ID;}queue<int>q;void build(){For(i,0,25) if(tr[0][i])q.push(tr[0][i]);while(!q.empty()){int u=q.front();q.pop();For(i,0,25)if(tr[u][i]){fail[tr[u][i]]=tr[fail[u]][i];q.push(tr[u][i]);}elsetr[u][i]=tr[fail[u]][i];}}void query(char *t){int u=0;for(int i=1;t[i];i++){u=tr[u][t[i]-'a'];for(int j=u;j;j=fail[j])val[j]++;}For(i,0,tot)if(id[i])cnt[id[i]]=val[i];} } void in(int &x){int y=1;char c=g();x=0;while(c<'0'||c>'9'){if(c=='-')y=-1;c=g();}while(c<='9'&&c>='0'){ x=(x<<1)+(x<<3)+c-'0';c=g();}x*=y; } void o(int x){if(x<0){p('-');x=-x;}if(x>9)o(x/10);p(x%10+'0'); }int find(int x){if(!d[x]) return AC::cnt[x];return AC::cnt[x]=find(d[x]); }int main(){in(n);For(i,1,n){scanf("%s",s+1);AC::insert(s,i);}AC::build();scanf("%s",t+1);AC::query(t);For(i,1,n)o(find(i)),p('\n');return 0; }
转载于:https://www.cnblogs.com/war1111/p/11256651.html
P5357 【模板】AC自动机(二次加强版)相关推荐
- 模板 - AC自动机
ACM-ICPC模板 目录 求有多少个模式串在文本串里出现过 建fail树dfs求每个模式串在文本串中的出现次数 ac自动机fail树上dfs序建可持久化线段树 AC自动机是一种多模匹配算法 AC自动 ...
- HDU 2222 ACAM模板(AC自动机)
这里找到了两篇很nice的Trie树(作者Hackbuteer1)以及AC自动机(作者niushuai666)入门详解.博主写的可以说是非常用心了,一看就懂. 题意:给出N(<=10000)个单 ...
- 提高篇 第二部分 字符串算法 第4章 AC自动机
https://blog.csdn.net/wangyh1008/article/details/81428056 [模板]AC自动机(加强版) 洛谷3796 AC自动机_A_loud_name-CS ...
- ac自动机 匹配最长前缀_AC自动机算法
AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包 ...
- P5357 【模板】AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数)
P5357 [模板]AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数) 传送门 形式上,AC 自动机基于由若干模式串构成的 Trie 树,并在此之上增加了一些 fail 边:本质 ...
- P5357 【模板】AC自动机(二次加强版) fail树
传送门 文章目录 题意: 思路: 题意: 思路: 这个只能搞failfailfail树了,让后跑一遍即可. 重复的字符串记一个,让后其他的都跟他一个答案即可. // Problem: P3796 [模 ...
- 洛谷P5357 - 【模板】AC自动机(二次加强版)(AC自动机+fail树)
题目链接:点击查看 题目大意:给出n个模式串,问在主串中分别出现了多少次 题目分析:如果像以往那样,在匹配的时候fail指针乱跳的话,那么是错误的AC自动机使用方法,时间复杂度也大大上升,接近于暴力的 ...
- P3796 【模板】AC自动机(加强版)
P3796 [模板]AC自动机(加强版) https://www.luogu.org/problemnew/show/P3796 题目描述 有NN个由小写字母组成的模式串以及一个文本串TT.每个模式串 ...
- luogu P3796【模板】AC自动机(加强版)
嘟嘟嘟 这个和某谷的AC自动机模板简单版差不多. 但还是要注意几点的: 1.这个是统计出现次数,而不是是否出现,所以在查询的时候加上这个节点的val后,不能把val标记为-1.那么也就可以说查询的时间 ...
- 【AC自动机】AC自动机(二次加强版)(luogu 5357)
正题 luogu 5357 题目大意 给你若干单词和一个字符串,让你查询每个单词在字符串中出现的次数 解题思路 AC自动机模板 先把单词丢进去,然后拿字符串去跑,每到一个点累计答案 因为数据较大,所以 ...
最新文章
- tensorflow入门教程和底层机制简单解说——本质就是图计算,自动寻找依赖,想想spark机制就明白了...
- 章鱼哥出品—VB.NET DataGridView绑定数据源 quot;与货币管理器的位置关联的行不能设置为不可见quot; 问题的解决...
- 河南关于领取软考2021年上半年合格证书的通知
- Python学习笔记:常用第三方模块(1)
- 反射获取空参数成员方法并运行
- IOS之通知KVO的常量定义
- 阿里云ECI如何6秒扩容3000容器实例?
- Docker+Nextcloud快速部署个人网盘
- AndroidStudio_gradle依赖相关错误的处理_Minimum supported Gradle version is 6.5. Current等---Android原生开发工作笔记228
- ORB-SLAM 解读(六)ORB特征点构建BoW
- Kali Linux终端命令大全(建议收藏!)
- java8新特性有哪些
- 计算机使用的dns错误,dns错误,教您dns错误怎么修复
- python绘制多边形样例_Python绘制多边形
- MATLAB机器人可视化
- 4. PyQt5的主要模块
- C语言中的strcat()函数
- idea maven打包war包项目
- oracle bpm 表单,Oracle BPM 安全认证
- LaTex(Texshop)的入门(一)(此篇有关中字字符的编译,格式的初步编排)