![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
KMP 扩展KMP
cervoliu
这个作者很懒,什么都没留下…
展开
-
[JZOJ 3427] 归途与征程
Description对于100%的测试点,1<=N<=100,1<=M<=100000。Analysis我们可以把A串视为一些串中间隔着一些星号。 显然,A串头尾都没有星号是有星号的特殊情况。因为无星号可以跳过头尾的串变成头尾都是星号。 下图,上者A,下者B。 我们可以对于A串中的小串与B串做一次KMP,搞一个bz[i][j]bz[i][j]表示第i个小串是否能与B的第j个位置往后相应长原创 2016-06-01 12:41:58 · 605 阅读 · 0 评论 -
【JZOJ 4624】字符串匹配
Description 串长度小于10^5,1<=n<=10^12AnalysisKMP匹配。 要加上连接处的贡献 对于S串长于T串的情况要特殊处理,把T串长度弄成>=S串,再乱搞。 注意细节。Code#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)u原创 2016-07-13 16:32:07 · 546 阅读 · 0 评论 -
扩展KMP
拖了这么久,终于打出扩展KMP了。 代码并不长,但是细节很多。最好把模板背下来,实在背不下来就根据原理去推。 相比于KMP来说扩展KMP的应用范围更广,更灵活。它的ext[i]与KMP的next[i]的区别就是next[i]表示长度最大的一段s[i-next[i]+1…i]=t[1…next[i]],ext[i]表示s[i…i+ext[i]-1]=t[1…ext[i]]。 其实本人认为EXKM原创 2016-08-10 21:43:31 · 339 阅读 · 0 评论 -
【GDOI 2014】beyond
Description给出两个串,求循环同构的最长前缀长度 1 <= N <= 2,000,000AnalysisA,B两个串循环同构,大概就如下图,两个串红色部分,白色部分分别相等 判断相等的话容易想到用扩展KMP的ext数组 给两个串互相做扩展KMP,得到exta,extb 如果枚举A串分界点ii,如果B串存在一个位置jj,满足约束j<=exta[i]j<=exta[i]extb[j原创 2017-03-01 12:52:58 · 384 阅读 · 0 评论 -
【JZOJ 4676】 模板串
Description给出一个长度为N的字符串,找出长度最小的一个子串作为模板串,使得其能可重叠覆盖整个串 N<=500000扩展KMP猛然发现其实SA好像能完全包含扩展KMP的功能QAQ假设模板串长度为len 把所有ext[i]>=len的位置i拉出来 如果所有这些位置两两间隔不超过len则说明len可行 从小到大枚举len,记录所有合法位置 当len增大,位置数只可能变小,用双向链表来原创 2017-07-04 21:03:01 · 243 阅读 · 0 评论 -
【JZOJ 4876】 基因突变
Description邪恶的707刚刚从白垩纪穿越回来,心中产生了一个念头:我要统治人类! 但是统治人类是很庞大且复杂的一个工程,707尝试了洗脑,催眠,以及武装镇压都没能成功地统治人类,于是她决定从科学上对人类的基因进行研究从而达到他的目的。 707获取了人类的基因信息并尝试对基因进行实验。他发现可以把人类的基因看做一个只包含小写字母的字符串,并定义从头开始任意长度的基因为“源原创 2016-11-30 20:25:46 · 508 阅读 · 0 评论 -
【JZOJ 5178】 So many prefix?
Description给出一个长度为N(N<=200000)字符串,求其所有长度为偶数的前缀在串中出现次数之和SAZZ选手的ZZ方法 弄出height之后,从rank[1]的位置往前后扫,O(n)KMP+dp设f[i]表示s[1~i]的答案 对于每个i,只用计算以i结尾的子串,于是弄出kmp的next f[i]=f[next[i]]+[i为偶数] O(n)原创 2017-06-28 12:37:28 · 383 阅读 · 0 评论 -
模板库
各种算法、数据结构、杂项模板库。原创 2016-03-12 17:46:29 · 1213 阅读 · 1 评论