
KMP
Loi_a
这个作者很懒,什么都没留下…
展开
-
bzoj 3670 动物园 KMP
KMP非常神,我们可以顺着fail数组把一个字符串所有前缀等于后缀的子串跑一边,而且顺序是从大到小。例如ababcccabab,fail11=4,fail4=2,fail2=0;对于这道题来说,我们可以顺着每一位的fail跑一遍(当然会T)求num数组,但是我们只要求出跑了多少次后,fail值等于0就可以了,上例sum[11]=sum[4]+1,sum在初始化的时候求出来。统计答案的时候,num[i原创 2016-10-14 20:07:22 · 406 阅读 · 0 评论 -
KMP模板
#include<iostream> #include<cstdio> #include<cstring> using namespace std; char s1[1000005],s2[1000005]; int fail[1000005]; void init(int m) { fail[1]=0; for(int i=2;i<=m;i++) { int原创 2016-10-14 14:43:57 · 405 阅读 · 0 评论 -
bzoj 3940 & 3942 KMP || AC自动机
3942题解: 定义f[i] 为S串以第i位结尾的后缀,最长可以是T串多长的前缀,这一个可以用KMP匹配。 可以用一个first数组记录i字符前一个未被匹配的位置是哪一个,当f[i]=len(T)时,就可以将最末尾的len(T)个字符匹配了。 3940只需要把KMP换为AC自动机就可以。3942:#include<cstdio> #include<cstring> #include<iostr原创 2017-04-15 07:15:27 · 493 阅读 · 0 评论