|----·KMP
yhf_2015
无。。。
展开
-
【hdu 1711】 Number Sequence KMP模板
#include using namespace std; int t, n, m; int a1[1000010], b1[10010], f[10010]; bool flag; inline int gt(){ char _ch; bool _ok = 0; int _num = 0, _op = 1; while(1){ _ch = getchar(); if(_ch =原创 2016-09-27 07:29:07 · 217 阅读 · 0 评论 -
【hdu 2087】 剪花布条
每次匹配成功,将p清零。 #include using namespace std; char a1[1010], b1[1010], f[1010]; int main(){ while(scanf("%s", a1+1) && a1[1] != '#'){ scanf("%s", b1+1); int len1 = strlen(a1+1), len原创 2016-09-27 07:57:48 · 203 阅读 · 0 评论 -
【hdu 3746】 Cyclic Nacklace KMP求循环节
考虑循环节的产生,产生一个循环节,一定是后面的f数组单调递增,全部可以完全匹配。所以总长度减去递增的长度就是循环节的长度。 #include using namespace std; char ch[100010]; int f[100010]; int main(){ int t; scanf("%d", &t); while(t --){ scanf("%s", ch+1原创 2016-09-27 11:27:30 · 211 阅读 · 0 评论 -
【hdu 2203】 亲和串 KMP匹配
处理环的方法:把链上的元素向后复制一遍。 #include using namespace std; char a1[200010], b1[100010]; int f[100010]; int main(){ while(scanf("%s%s", a1+1, b1+1) != EOF){ int len1 = strlen(a1+1)*2, len2 = strlen(b1+1);原创 2016-09-27 12:45:48 · 216 阅读 · 0 评论 -
【bzoj 3670】 [Noi2014]动物园 KMP变式
num数组让记录前缀后缀相同且不重复的数的个数,因为有限制条件,前后不能重复,所以匹配的时候如果有重复的也算是匹配失败。 然后是记录方案,考虑 #include using namespace std; const int mod = 1e9+7; int n, m; char a1[1000010]; int f[1000010], num[1000010]; inline原创 2016-09-27 19:13:40 · 329 阅读 · 0 评论 -
【NKOJ 1505】 何老板的考古发现
链接原题地址思路把环展开,变成长度为两倍的链,暴力KMPKMP匹配每两个串。代码#include <iostream> #include <cstdio> #include <cstring> using namespace std; char ch[110][20010]; int f[110][10010], g[20010], ok[110]; int n, m, cnt; void get_原创 2016-10-26 14:12:25 · 228 阅读 · 0 评论 -
【BZOJ 1355】[Baltic2009]Radio Transmission
题目来源:BZOJ 1355 思路: 求循环节用到KMP的fail数组的性质。 试想一个长度为n的字符串,fail数组是后缀与前缀相同的最长的长度,那么最短的循环节是不能匹配的,长度为n−fail[n]n-fail[n]。 代码: #include const int maxn = 1000010; int f[maxn], n, p; char a[maxn]; int main原创 2016-12-29 20:02:51 · 262 阅读 · 0 评论