本文对 AC 自动机的算法以及基础应用略作总结。 定义 AC 自动机在 Trie 上构造失配指针 状态 \(u\) 的失配指针 \(fail\) 指向状态 \(v\),即 \(v\) 是 \(u\) 在字典树所有状态集合中的最长后缀 转移边 \(trans\) 指向在当前对应串后续上一个字符能到达的 ...
分类:
编程语言 时间:
2020-06-27 09:54:58
阅读次数:
79
有了字典树的基础就可以学AC自动机惹(本蒟蒻学不会KMP) 前置技能:字典树 ...
分类:
其他好文 时间:
2020-06-22 17:19:47
阅读次数:
49
Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。KMP算法是 ...
分类:
其他好文 时间:
2020-06-14 16:49:06
阅读次数:
40
题目 有个长度为$n$的$A$串和若干个串$B_i$,$B_i$的价值为$v_i$ 若$A_=B_i$,则所有满足$[l,r]\in[L,R]\(的区间\)[L,R]$会得到$v_i$的价值。 记$W_{L,R}\(为区间\)[L,R]$的价值。 求$\max \frac{W_{L,R}}{R-L+ ...
分类:
其他好文 时间:
2020-06-05 23:01:10
阅读次数:
58
传送门 Analysis AC自动机+dp 直接从正面做 设$f[i][j][0/1]$表示在节点$i$,串长为$j$,是否已经经过结尾点的总方案数,然后从父亲向儿子转移 做$dp$的时候不用跳$fail$,在构建$fail$指针的时候顺带把对于结尾点的标记通过$fail$指针扩展到它在$fail$ ...
分类:
Web程序 时间:
2020-05-28 16:08:03
阅读次数:
71
POJ 1204 把要查询的串都扔进AC自动机,然后暴力check就是了 ...
分类:
其他好文 时间:
2020-05-21 16:34:01
阅读次数:
42
"ZOJ 3228" 先把模板串都丢进AC自动机 然后跑查询 对于允许重叠的,我们直接对$fail$树上一段路径的节点的答案++ 否则我们分串的长度讨论,对于每种长度的串处理一个答案$dp[i][6]$ ...
分类:
其他好文 时间:
2020-05-21 16:29:20
阅读次数:
61
"HDU 2457" 把AC自动机上的状态存进dp状态里,直接暴力转移就可以了 ...
分类:
其他好文 时间:
2020-05-21 16:12:48
阅读次数:
56
"POJ 2778" 对于所有串构建AC自动机,将AC自动机上的位置作为状态,暴力矩阵转移即可 cpp int n,m; int a[N]; char s[N]; int val[N]; const int SIZE=101; int trie[SIZE][4]; int End[SIZE]; in ...
分类:
其他好文 时间:
2020-05-21 15:58:56
阅读次数:
39
题目 "点这里" 看题目。 分析 首先,我们不需要真的从 AC 自动机中把串删掉。由于我们计算贡献和,我们只需要在 AC 自动机上,把已经删除的串的贡献抹掉就可以了。 接着考虑询问。这是一个很基础的问题,一般我们会在 AC 自动机上面处理出每个状态的贡献和,并且将询问的字符串在 AC 自动机上面跑一 ...
分类:
其他好文 时间:
2020-05-19 15:11:00
阅读次数:
60