AC自动机
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
[BZOJ1030][JSOI2007]文本生成器(AC自动机+dp)
有理想在的地方,地狱就是天堂。原创 2016-04-04 23:01:45 · 884 阅读 · 0 评论 -
[BZOJ3172][TJOI2013]单词(AC自动机)
老了就老了吧,安详地交给世界一副慈祥美。原创 2016-04-04 17:25:38 · 1128 阅读 · 2 评论 -
[BZOJ3940][Usaco2015 Feb]Censoring(AC自动机+栈)
题目描述传送门题解和BZOJ3942是差不多的。 搞一个栈,然后边匹配边压栈,匹配不了就跳到失配,匹配成功就暴力弹栈。 需要注意的一点是,弹栈之后要将当前匹配的节点恢复到栈顶元素的位置,然后从下一个元素开始继续匹配。 单个串kmp就可以完成,多个串改成AC自动机来做。代码#include<iostream>#include<cstring>#include<cstdio>#include原创 2016-12-24 23:00:11 · 1228 阅读 · 0 评论 -
[BZOJ2938][Poi2000]病毒(AC自动机+拓扑排序)
题目描述传送门题解如果把给出的所有串建成trie树的话,那么有解的条件就是在匹配不到end节点的情况下无限地匹配下去。 注意不是只有每一个串的结束节点才是end节点,根据fail树的性质,假设y的fail指针指向x,那么如果x有end标记y也一定有end标记,因为x是y的一个后缀。 对于某一个节点如果它没有某一个儿子那么就把它这个儿子表示成它的fail的那个儿子。这样的话就形成了一个trie图。原创 2016-12-24 23:18:10 · 938 阅读 · 0 评论 -
SDOI2017 Round1 解题报告
Day1A product题意简述定义f(0)=0,f(1)=1,f(n)=f(n−1)+f(n−2)(n≥2)f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n\ge 2) 求∏i=1n∏j=1mf(gcd(i,j))\prod\limits_{i=1}^n\prod\limits_{j=1}^m f(gcd(i,j)) 多组数据,对109+710^9+7取模数据范围对10%原创 2017-04-12 07:43:21 · 1195 阅读 · 0 评论 -
[BZOJ4327]JSOI2012 玄武密码(AC自动机)
题目描述传送门题解将小串离线然后建立AC自动机 大串在自动机上直接匹配,能匹配的点标1 然后对于每一个点,如果它能匹配,那么它fail指向的点也能匹配 传递一下标记 然后对于每一个小串再查询一下前缀最多到哪里都匹配了代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmat原创 2017-03-02 23:18:20 · 1049 阅读 · 0 评论 -
[BZOJ1212][HNOI2004]L语言(AC自动机+dp)
题目描述传送门题解这道题我开始就想到了暴力,但是算一算时间复杂度是O(20∗10∗1M)≈2∗108O(20*10*1M)\approx 2*10^8这很显然不科学啊。。 但是上网查了一下题解发现大家好像都是用的很暴力的方法,并且还有人说20*10*1M轻松过我也不知道是为什么1M不应该是102421024^2嘛?dp的思路非常好想,就是f(i)表示前i个是不是合法的串,可以知道如果位置i减去任何原创 2016-12-24 23:06:59 · 796 阅读 · 0 评论 -
[BZOJ3530][Sdoi2014]数数(AC自动机+数位dp)
题目描述传送门题解今天胡策gty竟然原搬sdoi原题… 写完顺手过了样例,写暴力对拍竟然不出错!自己也吃了一惊,感觉稳得很 结果没处理前导0…GG把所有的数字串丢到AC自动机里去 f[i][j][0/1][0/1]表示第i位数,匹配到AC自动机的第j个节点,现在是否填过不为0的数,是否卡上界的方案数 处理前导0的时候就是如果前面没有填过不为0的数那么一直停留在AC自动机的根节点 注意fai原创 2017-01-19 21:51:34 · 803 阅读 · 0 评论 -
AC自动机 学习笔记
Q:给出一坨短串,给出一个长串,求有多少个短串在长串中出现了。 A:把短串丢进trie树,建立fail指针,把长串在trie树上匹配,暴力蹦fail即可。每一个点只会被蹦一遍,打标记即可。Q:给出一坨短串,给出一个长串,求每一个短串在长串中出现了多少次。 A:把短串丢进trie树,建立fail指针,把长串在trie树上匹配,能匹配上的点size都+1,然后建立fail树,统计每一个短串end节点原创 2016-12-25 10:37:45 · 874 阅读 · 0 评论 -
[BZOJ3881][Coci2015]Divljak(AC自动机+dfs序+lca+bit)
题目描述传送门题解首先把所有的S串都丢到trie树里,建立fail树。 每加进来一个T,把它在AC自动机上暴力匹配,匹配到的每一个点在fail树中到根的路径上出现过的S串end标记的S串都应该+1,也就是说,每一次求出匹配到的每一个点在fail树中到根的路径上出现过的end标记表示的S串,然后取并集,这些S串的答案应该+1. 由于有可能有重复计算,我们需要把所有匹配过的点按照dfs序排序,然后要原创 2016-12-25 10:35:27 · 667 阅读 · 0 评论 -
[HDU2896]病毒侵袭(AC自动机)
风月如我相思局,怎堪相思未相许。原创 2016-02-27 21:04:55 · 869 阅读 · 0 评论 -
[HDU2222]Keywords Search(AC自动机)
爱情是场患得患失的戏。原创 2016-02-27 19:19:00 · 761 阅读 · 0 评论 -
[BZOJ1009][HNOI2008]GT考试(AC自动机+dp+矩阵优化)
无论你从什么时候开始,重要的是开始后就不要结束。原创 2016-05-24 07:28:28 · 725 阅读 · 0 评论 -
[BZOJ2434][NOI2011]阿狸的打字机(AC自动机+树状数组)
有希望在的地方,痛苦也成欢乐。原创 2016-04-04 23:11:54 · 1737 阅读 · 1 评论 -
[HDU3065]病毒持续侵袭中(AC自动机)
题目描述传送门 注意:题目有多组数据。题解之前写过这道题,但是感觉复杂度应该是O(S∗len)O(S*len)的,也就是5∗1075*10^7 换了一个更科学的做法。就是每一次匹配都把它的权值+1,然后最后再fail树上统计子树和。 用到的性质就是fail树上的节点到根路径上的点都是这个点表示的字符串的前缀的后缀。 这样的话时间复杂度应该是O(S+N∗len)≈2.05∗106O(S+N*l原创 2016-12-23 23:19:00 · 667 阅读 · 0 评论