AC自动机
文章平均质量分 74
fyc_kabuto
一个蒟蒻程序员
展开
-
bzoj 2938: [Poi2000]病毒
题目大意,问是否存在一个无限长的串,且不包含题目给出的子串。 AC自动机。 将给出的n个串建一颗AC自动机,如果有一个无限长串能在上面一直跑且一直不经过匹配点就满足条件。 容易想到即要在自动机上存在一个不包含匹配点的环。 dfs一遍就好了。 code: #include #include #include #include #include #include using namespa原创 2017-07-20 10:56:22 · 228 阅读 · 0 评论 -
bzoj 1030: [JSOI2007]文本生成器
当时道AC自动机的模板题吧。好久没打忘得七七八八。 AC自动机其实跟KMP没什么巨大区别。 这题直接做有些困难,考虑补集转化思想,即求不可阅读的方案数。 题意可以转化为在自动机上走m步,不经过单词结尾点(fail指针指向的点也算) f[i][j]表示前i个字符走到j号点的方案数。 这样就很好转移了。 code: #include #include #include #include原创 2017-07-19 16:09:35 · 270 阅读 · 0 评论 -
bzoj 3530: [Sdoi2014]数数
题意:求1~n中不含有集合S中的元素为子串,不含前导0。题解:一开始傻傻的写了之前的数位dp版本。 换了种打法,f[i][j][k]f[i][j][k]表示前i位,在自动机j号点上。 k=0为小于n,k=1等于,k=2大于。 然后瞎转移。 code:#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream>原创 2017-09-10 17:07:58 · 224 阅读 · 0 评论 -
bzoj 2434: [Noi2011]阿狸的打字机
题意:给出一个字典树,并告诉你若干串的结束位置。求第x个串在第y个串的出现次数。题解:不难的AC自动机+不难的主席树。 首先对于字典树建AC自动机,那么对于一个串S,假如能在这个串的结尾点不断跳fail跳到S1的结尾点的话,就说明S的其中一个后缀是S1。那么我们可以枚举串y的前缀,假如这个前缀的后缀是x的话,ans++。即该前缀的结尾点是x结尾点在fail树上的子节点。 我们对fail树dfs序原创 2017-09-03 14:34:10 · 240 阅读 · 0 评论 -
bzoj 2553: [BeiJing2011]禁忌
AC自动机+dp+矩乘原创 2018-01-02 08:46:54 · 255 阅读 · 0 评论 -
bzoj 5451: 字符串
题意: 给定正整数m以及n个01串s1~sn,你需要求出长度为2m的反对称的包含这n个01串作为子串的01串的个数。对998244353取模。 一个01串s是反对称的当且仅当它对于1&lt;=i&lt;=∣s∣1&lt;=i&lt;=|s|1<=i<=∣s∣都满足s[i]≠s[∣s∣−i+1]s[i]≠s[|s|-i+1]s[i]̸=s[∣s∣−i+1...原创 2019-02-24 19:57:39 · 617 阅读 · 0 评论