
KMP
Chester_King
虽千万人,吾往矣。
展开
-
【BZOJ】3670 [Noi2014]动物园 KMP
题目传送门这题的正解就写在了题目里——KMP。(NOI的题目有这么好心吗?)对于每个字符串,我们先求出next数组,也就是失配函数,并记录当前状态经过几次pre=next[pre]会使pre==0,也就是num数组的雏形。然后再做一遍类似于求next数组的循环,并while(pre*2>i) pre=next[pre],然后就是统计答案咯。由于今天不知中了什么毒,可能是天气太热,我原创 2017-04-18 20:19:45 · 562 阅读 · 0 评论 -
【洛谷】3808 【模板】AC自动机(简单版)
题目传送门终于看懂啦!终于学会了AC自动机啦!(Flag立起)写篇博客梳理一下自己的思路吧。在文章的开头,必须先放上一些大佬的博客来压压场面:我选的当然是ZZK大佬,神犇传送门然而AC自动机的原理其实是比较好理解的,就是把Trie树和KMP的思想结合起来。这么说起来KMP就是单个字符串的AC自动机啊。(雾)给出许多模式串,把这些字符串都加入到Trie树中,在每个字符串结尾的叶子节点原创 2017-08-01 13:57:39 · 644 阅读 · 0 评论 -
【洛谷】3796 【模板】AC自动机(加强版)
题目传送门这题嘛,就是一个AC自动机的模板。主要是巩固一下今天学的AC自动机。在构造Trie树的时候在每一个字符串结尾的叶节点上标记一下该节点属于第几个字符串,然后对文本串跑一边AC自动机,对每一个经过的节点计数一下。然后把每一个模式串按计数从大到小sort一下,第一个模式串的计数就是答案,然后向后枚举和答案相同的模式串即可。附上AC代码:#include #include原创 2017-08-01 20:22:39 · 356 阅读 · 0 评论 -
【BZOJ】1030 [JSOI2007]文本生成器 AC自动机+DP
题目传送门经过这道题的练习,我对AC自动机有了更加深刻的理解:怎么计算AC自动机需要的数组大小。(话说为什么我以前不会?大概是以前太瓜皮了吧……)这题的题目大意就是让我们求构成长度为m的文本串,且文本串内至少包含一个模式串的方案总数。我们可以用集合的思想,把题目转化成构成长度为m的文本串的方案数减去构成长度为m的文本串中不包含任意一个模式串的方案数。然后考虑AC自动机,我们把每原创 2017-08-01 22:06:19 · 292 阅读 · 0 评论 -
【BZOJ】1009 [HNOI2008]GT考试 KMP+DP+矩阵优化
题目传送门又是一道神题,感觉这题的思想好强啊。首先考虑DP,定义f[i][j]表示当前我们DP到准考证的第i位,后缀与不吉利的数字匹配了j位的方案数。状态转移方程为f[i][j]+=f[i-1][k],可以通过枚举第i位的数字,求出k的大小,进行状态的转移。突然发现求k的过程和KMP的失配过程差不多,于是我们可以用KMP来转移状态。但是这个DP显然是不符合我们的要求的,时间复杂度巨大。考虑重构DP,定义f[i][j]表示当前我们DP到不吉利数字的前i位(注意,这里和上面不一样),在第i位后放置一原创 2017-10-09 17:53:35 · 233 阅读 · 0 评论 -
【HDU】4787 GRE Words Revenge 二进制分组+AC自动机
题目传送门orz Manchery多次询问可以按时间分治,但可惜这题强制在线。因而引入了二进制分组,就是把当前字符串的数量二进制拆分。比如说当前有10个字符串,就把这10个字符串分成一组8个和一组2个。这样每个字符串最多被重构AC自动机log2n\log_2n,一种优美的暴力二进制分组适用于那些不支持修改的数据结构,AC自动机算一例,凸包也是。附上AC代码:#i原创 2018-01-15 21:08:09 · 462 阅读 · 0 评论