
AC自动机
文章平均质量分 70
PoPoQQQ
这个作者很懒,什么都没留下…
展开
-
HDU 2222 Keywords Search AC自动机模板题
题目大意:给定一些单词和一个字符串,求有多少单词在字符串中出现过首先我不想吐槽题号。真的不想。真的不想!!别问我为什么说这句话!!不想就是了!!AC自动机模板题简单介绍一下AC自动机首先不要把这东西和自动AC机弄混 自动AC机算法等我们发明之后再加介绍这东西的实现方法就是把所有单词插入一棵Trie树 然后在Trie树上跑KMP算法每个节点有一个next指针 和KMP算法原创 2014-09-15 13:52:47 · 1829 阅读 · 0 评论 -
BZOJ 3940 Usaco2015 Feb Censoring AC自动机
题目大意:给定一个字符串A和一些模板串,要求删除A中所有的模板串后输出同3942,由于是多串所以把KMP换成AC自动机即可#include #include #include #include #define M 100100using namespace std;int n;char s[M],_s[M];namespace Aho_Corasick_Automaton{原创 2015-04-09 10:35:05 · 1754 阅读 · 0 评论 -
BZOJ 2938 Poi2000 病毒 AC自动机+拓扑排序
题目大意:给定n个01串,问是否存在一个无限长的01串,不包含这n个01串中的任何一个建出Trie图之后判环即可我这傻逼一开始居然跑了一个DFS去判环23333#include #include #include #include #define M 30300using namespace std;int n;char s[M];namespace Aho_Coras原创 2015-03-08 17:00:48 · 1964 阅读 · 0 评论 -
BZOJ 3881 Coci2015 Divljak fail树+树链的并
题目大意:给定两个字符串集合S和T,初始给定S集合中的所有字符串,不断向T集合中添加字符串,以及询问S集合中的某个字符串在T集合中的多少个字符串中出现过神题- -首先对S集合的所有字符串构建fail树T集合中每加入一个字符串,我们就将这个字符串在AC自动机上跑一遍,并记录经过的所有节点根据fail树的性质,这些节点到根路径上的所有节点的并集的出现次数都加了1因此我们要求的就是树原创 2015-01-22 15:41:34 · 3191 阅读 · 1 评论 -
BZOJ 1444 JSOI2009 有趣的游戏 AC自动机+矩阵乘法
题目大意:给定n个长度为l的模式串,现在要用前m个大写字母生成一个随机串,每个字符有自己的出现几率,第一次出现的字符串获胜,求最终每个字符串的获胜几率建出AC自动机,搞出转移矩阵如果某个节点是模式串那么这个节点只向自己连一条概率为1的出边然后把转移矩阵自乘50遍即可#include #include #include #include #define M 120using原创 2015-02-04 13:50:22 · 2376 阅读 · 0 评论 -
BZOJ 2754 SCOI2012 喵星球上的点名 fail树+set启发式合并
题目大意:给定n个目标串和m个模式串,问这m个模式串每个在多少个目标串中出现过,以及n个目标串每个以最多多少个模式串为子串我错了……就算用fail树+set启发式合并也优化不到O(nlog^2n)……这题的数据范围相当无解啊首先将所有名字和点名的字符串全都插进AC自动机将每个点上开一个set记录这个点是哪些喵星人的名字的前缀然后建立fail树 沿着fail树从下到上启发式合并每原创 2014-12-09 00:35:48 · 2102 阅读 · 0 评论 -
BZOJ 3172 Tjoi2013 单词 fail树
题目大意及后缀数组做法见 http://blog.youkuaiyun.com/popoqqq/article/details/41042473原来正解是fail树……难怪后缀数组被卡成这样首先我们将给出的n个串构建AC自动机朴素的做法是对于每个串将这个串每个节点沿着fail指针扫一遍,将路径上的所有点的cnt++但是这样做会TLE我们不妨反向思考 fail指针反向后是一棵树 沿着fail原创 2014-12-08 20:18:47 · 2862 阅读 · 0 评论 -
BZOJ 1030 JSOI2007 文本生成器 AC自动机+DP
题目大意:给定n个模式串,求长度为m的至少含有一个模式串的字符串共有多少种照例,令f[i][j]表示长度为i的字符串与AC自动机上的第j个点匹配的方案数直接DP很难,我们考虑补集法,即用26^m减去不含任何模式串的字符串的数量后者就是经典的AC自动机DP模型啦~~#include #include #include #include #define MOD 10007us原创 2014-12-08 13:12:12 · 1938 阅读 · 0 评论 -
BZOJ 2434 NOI2011 阿狸的打字机 fail树+树状数组
题目大意:初始字串为空,首先给定一系列操作序列,有三种操作:1.在结尾加一个字符2.在结尾删除一个字符3.打印当前字串然后多次询问第x个打印的字串在第y个打印的字串中出现了几次卡了很久……到底还是对AC自动机了解不是很深啊QAQfail树不是很难想 至少在用AC自动机切掉3172之后不是很难想……首先构建AC自动机 注意由于这个字串的特殊构造 我们不必每打印一个字符串再原创 2014-11-26 16:39:36 · 3324 阅读 · 0 评论 -
BZOJ 1212 HNOI2004 L语言 AC自动机(Trie树)+动态规划
题目大意:给定一个单词表和m个字符串 问每个字符串的最长的前缀,满足这个前缀可以拆分成一些字符串 使这些字符串都在单词表中出现过再也不敢看错数据范围了……一道明明用Trie树能解决的问题居然被我写了AC自动机……将单词表中的单词全都插入AC自动机 每个单词所在的节点记录这个单词的长度然后对于每个字符串 用f[i]表示长度为i的前缀是否能拆分成单词表中的单词 跑AC自动机对于每个匹配原创 2014-11-18 20:48:33 · 2727 阅读 · 0 评论 -
BZOJ 2553 BeiJing2011 禁忌 AC自动机+矩阵乘法
题目大意:给定n个模式串,定义一个字符串的伤害为所有子串的划分中最多包含的模式串数量,求长度为len的字符串的伤害期望值小五prpr,恋恋prpr,二小姐prpr首先建立AC自动机 令f[i][j]表示长度为i的字符串在AC自动机上的第j个节点的伤害期望值如果要走到某个节点是危险节点或者fail指针指向危险节点,就ans++,然后回到根节点这样构造出来的矩阵做快速幂= = 这么做都原创 2015-01-12 23:03:09 · 1438 阅读 · 0 评论