非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自动机(二次加强版)相关推荐

  1. 模板 - AC自动机

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

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

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

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

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

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

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

  5. P5357 【模板】AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数)

    P5357 [模板]AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数) 传送门 形式上,AC 自动机基于由若干模式串构成的 Trie 树,并在此之上增加了一些 fail 边:本质 ...

  6. P5357 【模板】AC自动机(二次加强版) fail树

    传送门 文章目录 题意: 思路: 题意: 思路: 这个只能搞failfailfail树了,让后跑一遍即可. 重复的字符串记一个,让后其他的都跟他一个答案即可. // Problem: P3796 [模 ...

  7. 洛谷P5357 - 【模板】AC自动机(二次加强版)(AC自动机+fail树)

    题目链接:点击查看 题目大意:给出n个模式串,问在主串中分别出现了多少次 题目分析:如果像以往那样,在匹配的时候fail指针乱跳的话,那么是错误的AC自动机使用方法,时间复杂度也大大上升,接近于暴力的 ...

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

    P3796 [模板]AC自动机(加强版) https://www.luogu.org/problemnew/show/P3796 题目描述 有NN个由小写字母组成的模式串以及一个文本串TT.每个模式串 ...

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

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

  10. 【AC自动机】AC自动机(二次加强版)(luogu 5357)

    正题 luogu 5357 题目大意 给你若干单词和一个字符串,让你查询每个单词在字符串中出现的次数 解题思路 AC自动机模板 先把单词丢进去,然后拿字符串去跑,每到一个点累计答案 因为数据较大,所以 ...

最新文章

  1. tensorflow入门教程和底层机制简单解说——本质就是图计算,自动寻找依赖,想想spark机制就明白了...
  2. 章鱼哥出品—VB.NET DataGridView绑定数据源 quot;与货币管理器的位置关联的行不能设置为不可见quot; 问题的解决...
  3. 河南关于领取软考2021年上半年合格证书的通知
  4. Python学习笔记:常用第三方模块(1)
  5. 反射获取空参数成员方法并运行
  6. IOS之通知KVO的常量定义
  7. 阿里云ECI如何6秒扩容3000容器实例?
  8. Docker+Nextcloud快速部署个人网盘
  9. AndroidStudio_gradle依赖相关错误的处理_Minimum supported Gradle version is 6.5. Current等---Android原生开发工作笔记228
  10. ORB-SLAM 解读(六)ORB特征点构建BoW
  11. Kali Linux终端命令大全(建议收藏!)
  12. java8新特性有哪些
  13. 计算机使用的dns错误,dns错误,教您dns错误怎么修复
  14. python绘制多边形样例_Python绘制多边形
  15. MATLAB机器人可视化
  16. 4. PyQt5的主要模块
  17. C语言中的strcat()函数
  18. idea maven打包war包项目
  19. oracle bpm 表单,Oracle BPM 安全认证
  20. LaTex(Texshop)的入门(一)(此篇有关中字字符的编译,格式的初步编排)

热门文章

  1. git 修改全局配置
  2. 一些知识点的整理以及面试题记录
  3. Ibatis学习总结7--SqlMapClient 执行 SQL 语句
  4. Fatal error:SQL Server 不存在或拒绝访问。
  5. JAVA 运行与开发环境配置(二)- hello java
  6. 遭遇ORA-01200错误的原因及解决方法
  7. putty利用密钥ssh服务登录ubuntu server 10.4
  8. Windows打印机驱动开发笔记(一)
  9. 专访Connolly:为什么我们需要手动回归测试宣言?
  10. 交互搜索中的自然语言理解技术