KMP
ff_666
开心最好。。但现在正是奋起之时!!!
展开
-
LOJ10043
LOJ10043KMP裸题,每次匹配完从头开始就好了#include<bits/stdc++.h>#define pt(ch) (Top<1000000?St[Top++]=ch:(fwrite(St,1,1000000,stdout),St[(Top=0)++]=ch))using namespace std;int Top;static char St[10...原创 2018-08-20 12:01:39 · 142 阅读 · 0 评论 -
LOJ10045
LOJ10045考虑KMP的失配fail指针 指向的显然是离自己最近的相同串。。有点难以表达 举个例子: abcabcabcabcabcabcabcabcabc 那么最后一个ccc就指向前一个ccc,匹配成这样: abcabcab|c|abcabcab|c|abcabcab|c| (原串) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abcab|c|ab...原创 2018-08-20 14:27:43 · 134 阅读 · 0 评论 -
LOJ10046
LOJ10046这题有点像反的LOJ10045,只不过这次要尽量长 KMP是找最近的,因此我们再开一个lst[]lst[]lst[],从左往右扫,更新lst为最远的相同子串 (PS:由于要统计长度,iii要1~N枚举)#include<bits/stdc++.h>#define LL long long#define __R registerusing names...原创 2018-08-20 15:27:49 · 172 阅读 · 0 评论 -
LOJ10048
LOJ10049分析一下暴力:每次从头KMP扫一趟 实际上,不需要从头扫 ——因为上次处理前面的部分都没挖出来,现在肯定也不会出现 但缺口处有可能拼接出一个新串,但反正是绝对轮不到前面的前面了也就是说,后面接上的肯定能压住前面的 ——这不就是单调栈吗!!!用KMP优化一下字符串比较,就可以均摊O(len)O(len)O(len)干掉此题 PS:由于这题有点不一样,KMP是要不...原创 2018-08-20 16:30:39 · 216 阅读 · 0 评论 -
LOJ10047
LOJ10047这题是对KMP性质的深度挖掘啊。。已知fail指针指向的是字符串中既是前缀,又是后缀的最长串 则假如fail是father,就得到了所谓的“fail树” 我们对于一段长度为R的字符串,显然就是要找到R一直到根的节点中有没有满足介于[k,R/2)的那么就可以枚举子串的左端点L,然后边往右枚举边刷KMP的fail指针,并顺着fail指针往回找 但这样最坏是O(N3)O...原创 2018-08-21 10:02:16 · 518 阅读 · 0 评论 -
BZOJ3679
BZOJ3679KMP的nxt满足S[0,k]==S[i−k+1,i]S[0,k]==S[i−k+1,i]S[0,k]==S[i-k+1,i] 可是这题需要满足长度&amp;lt;=(len+1)/2 所以我们假设nxt[i]−−−&amp;gt;inxt[i]−−−&amp;gt;inxt[i]---&gt;i(向iii连边),这样得到了一棵“Fail树” 我们要不断往上跳,直到dep&amp;lt;=(len+1)原创 2018-08-21 11:17:14 · 157 阅读 · 0 评论