问题描述 LG2444 BZOJ2938 I \(\mathrm{AC}\)自动机 \(\mathrm{AC}\)自动机是一种多模式串匹配算法,本萌新今天刚学了它qwq 约定在构造\(\mathrm{AC}\)自动机的过程中,\(\mathrm{Trie}\)树上的边和由于\(\mathrm{AC}\)自动机中这一句: else ch[x][i]=ch[fail[x]][i]; 所新建的边为实边. 也就是\(x\)到\(ch[x][0]\)和\(ch[x][1]\)的边为实边. II 危险! 什…
题目描述 有N个由小写字母组成的模式串以及一个文本串T.每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串T中出现的次数最多. 输入输出格式 输入格式: 输入含多组数据. 每组数据的第一行为一个正整数N,表示共有N个模式串,1≤N≤150. 接下去N行,每行一个长度小于等于707070的模式串.下一行是一个长度小于等于10^6的文本串T. 输入结束标志为N=0. 输出格式: 对于每组数据,第一行输出模式串最多出现的次数,接下去若干行每行输出一个出现次数最多的模式串,按输入顺序排列.…
传送门 ac自动机模板,可能我写的ac自动机是有点问题的,所以跑的有些慢 暴力跳fail统计 代码: #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<queue> using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar()…
传送门 ac自动机模板题,裸的多串匹配 代码: #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<queue> using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar(…
实现功能——输入N,M,提供一个共计N个单词的词典,然后在最后输入的M个字符串中进行多串匹配(关于AC自动机算法,此处不再赘述,详见:Aho-Corasick 多模式匹配算法.AC自动机详解.考虑到有时候字典会相当稀疏,所以引入了chi和bro指针进行优化——其原理比较类似于邻接表,这个东西和next数组本质上是一致的,只是chi和bro用于遍历某一节点下的子节点,next用于查询某节点下是否有需要的子节点) type point=^node; node=record ex:longint;st…
题目描述 有$N$ 个由小写字母组成的模式串以及一个文本串$T$ .每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串$T$ 中出现的次数最多. 输入输出格式 输入格式: 输入含多组数据. 每组数据的第一行为一个正整数$N$ ,表示共有$N$ 个模式串,$1 \leq N \leq 150$ . 接下去$N$ 行,每行一个长度小于等于$70$ 的模式串.下一行是一个长度小于等于$10^6$ 的文本串$T$ . 输入结束标志为$N=0$ . 输出格式: 对于每组数据,第一行输出模式串…
AC自动机基本操作 (1) 在AC自动机中,我们首先将每一个模式串插入到Trie树中去,建立一棵Trie树,然后构建fail指针. (2) fail指针,是穿插在Trie树中各个结点之间的指针,顾名思义,就是当匹配失败的时候,用于引导p指针回溯,就和KMP算法中的next数组道理相同. #include<bits/stdc++.h> using namespace std; #define MAX 26 //字典树关键字为‘a’~‘b’ ]; //主串(文章) int n; //模式串共有n串…
Description: 输出有哪些模式串在文本串中出现次数最多,这个次数是多少 Hint: 多组数据,$ len_{文本串}<=10^6,\sum len_{模式串} <= 70*150 $ Solution: 模板题,详见代码 // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; const int mxn=2e6+5; char p[160][80],str[mxn]; int n,st[…
题目大意:给定 N 个模式串和一个文本串,求每个模式串在文本串中出现的次数. 题解:文本串在自动机上匹配的过程中,记录下自动机上每一个状态被访问的次数.对于访问到的节点 i,则状态 i 的后缀中存在的匹配串的出现次数都要增加 1.若每次都暴力跳 fail 树的话,复杂度无法得到保证.观察发现,对于每一个模式串,能够对其答案产生贡献的状态一定是 fail 树上的,以该模式串节点为根节点的子树中的节点表示的状态.因此,将 fail 树显示建立出来,在文本串匹配结束后做一次 dfs 即可求出所有的模式…
题目:https://loj.ac/problem/3055 先写了暴力.本来想的是 n<=300 的那个在树上暴力维护好整个字符串, x=1 的那个用主席树维护好字符串和 nxt 数组.但 x=1 的部分会 TLE ,而且似乎不太对的样子. #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define ll long long #define pb pu…