
字符串-KMP
Endless_Way
这个作者很懒,什么都没留下…
展开
-
BZOJ 3670 [Noi2014]动物园
KMP算法(博主写的很形象)本题只需把KMP算法稍作修改,大概就是跑两次匹配。记一个数组cnt[i]表示next[i]往回递归多少次之后等于0,也就是字符串前i位里面有多少层更小的相等前后缀。这些在第一次KMP里做完。第二次,我本来是对于每个i,用next[i]暴力往回找到第一个小于i/2的下标j,把答案乘上(cnt[j]+1),但是这样T了。。。后来发现,如果对于i,贡献答案的是cnt[j],对于原创 2016-08-01 15:52:35 · 292 阅读 · 0 评论 -
BZOJ 4560 [JLoi2016]字符串覆盖
贪心+KMP一副区间DP的样子,然而并不是如果只有两个串,那我们可以枚举它们的先后顺序。对于maxans则让前一个串在尽量前的位置匹配,后一个串在尽量后的位置匹配。对于minans则枚举前一个串匹配的位置,把后一个串放在第一个串开头后面第一个匹配位置。推广下去就有了四个串的做法。枚举顺序,对于maxans,第i+1个串的开头要么在第i个串结尾后的第一个匹配位置,要么在第i个串内部的最后一个匹配位置。原创 2017-02-14 08:11:31 · 1479 阅读 · 1 评论 -
BZOJ 3620 似乎在梦中见过的样子
KMP显然给出的东西看起来就像border,因此有一个n^2的暴力KMP做法。我以为过不了,脑补了半天也没什么想法,然后发现题解就是n^2暴力???#include<cstdio>#include<cstring>#define N 15555using namespace std;namespace runzhe2000{ char s[N]; int n, k, nex原创 2017-04-02 00:27:36 · 358 阅读 · 0 评论 -
BZOJ 4974 [Lydsy1708月赛]字符串大师
KMP这题的解法直接揭示了一个结论。定义:称一个串 TTT 是 SSS 的循环节,当且仅当存在正整数 kkk ,使得 SSS 是 TTT 重复 kkk 次拼接形成的串的前缀。性质:若一个字符串 SSS 的最小循环节长度为 aaa,那么 SSS 的最大的border(当然要除了 SSS 本身)是 |S|−a|S|−a|S|-a。证明显然。知道完这个,模拟一遍KMP就好了。#inc...原创 2018-08-22 00:02:01 · 386 阅读 · 0 评论