
ac自动机
_zidaoziyan
这个作者很懒,什么都没留下…
展开
-
BZOJ 3172: [Tjoi2013]单词(fail树)
题意: 一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。 思路: ac自动机的本质如果一个串是另外一个串的子串,那么这个串是另外一个串的前缀的后缀,即另外一个串通过不停地fail指针可以移动 到这个串的末尾 知道了这个理论,那么其实fail指针就是一棵树,求这个串总共出现多少次->这个节点的子树的大小(通过循环传原创 2016-11-04 14:29:56 · 332 阅读 · 0 评论 -
BZOJ 2434: [Noi2011]阿狸的打字机(fail树+树状数组)
题目大意:初始字串为空,首先给定一系列操作序列,有三种操作: 1.在结尾加一个字符 2.在结尾删除一个字符 3.打印当前字串 然后多次询问第x个打印的字串在第y个打印的字串中出现了几次 思路: 构造出fail树,dfs序标号,查询按y排序,树状数组单点修改区间查询 #include<cstring> #include<algorithm> #include<cstri原创 2016-11-04 20:22:03 · 346 阅读 · 0 评论 -
HDU 5069 Harry And Biological Teacher(fail树+线段树优化)
题意: 有n个字符串(n<=100000),总长度小于等于1e5,有m次查询,X,Y,问第X个的后缀和第Y个的前缀的最长公共子串 思路一: 总体思路 构造fail树,dfs序 按Y排序 X最后一个对应在字典树中的位置 首先,我们可以找到a在自动机上所对应的节点,考虑ac自动机的fail指针,那么从这个节点,往上一直到根的链上, 所有的节点所包含的子串,原创 2016-11-04 20:27:47 · 492 阅读 · 1 评论 -
Codeforces Round #362 (Div. 2) F. Legen...(AC自动机+矩阵快速幂)
题意: 我们有n(200)个特殊单词,总长度不超过200。 我们要构造一个长度为l(1e14)的字符串。 如果字符串每包含一个给定单词i(可重叠匹配),则我们的权值计数+a[i] 问你最大可以得到的权值 思路: 对自动机上的状态,我们可以建立状态之间的转移可以获得的权值 ->对建立好之后的矩阵跑快速幂 #include<cstdio> #include<algo原创 2016-11-09 16:57:08 · 390 阅读 · 0 评论