随笔分类 -  kmp

摘要:/* http://codeforces.com/problemset/problem/149/E KMP结合动态规划的思想,正向匹配一边,l[]数组保存的是对于匹配串的每一个位置在模式串能匹配的最左边,也就是首次匹配的位置 逆序再匹配一次,逆向信息保存r[]数组。 再枚举l[i]+r[len-i]*/#include<stdio.h>#include<iostream>#include<string.h>#include<math.h>#include<algorithm>#pragma comment(linker, " 阅读全文
posted @ 2013-05-21 21:30 Roly Yu 阅读(190) 评论(0) 推荐(0)
摘要:#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <math.h>#include <vector>#include <map>#include <queue>#include <stack>#include <stdlib.h>using namespace std;const int maxn = 10000 阅读全文
posted @ 2013-05-17 11:52 Roly Yu 阅读(164) 评论(0) 推荐(0)
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=3374最小表示法:http://tobyaa.blog.163.com/blog/static/30248591201261604349913/#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1000005;char str[maxn];int next[maxn];void ge 阅读全文
posted @ 2013-05-14 18:36 Roly Yu 阅读(238) 评论(0) 推荐(0)
摘要:题目:http://acm.fzu.edu.cn/problem.php?pid=1926#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <stdlib.h>#include <math.h>#include <vector>#include <map>using namespace std;const int maxn = 1005 阅读全文
posted @ 2013-05-11 22:05 Roly Yu 阅读(203) 评论(0) 推荐(0)
摘要:http://www.codeforces.com/problemset/problem/182/D利用到KMP的周期性。现寻找最小周期,再进行扩充。#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <math.h>#include <fstream>#include <vector>#include <map>#include < 阅读全文
posted @ 2013-05-04 13:14 Roly Yu 阅读(199) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2185题意:给你一个字符矩阵,求出它的最小覆盖子矩阵,即使得这个子矩阵的无限复制扩张之后的矩阵,能包含原来的矩阵。即二维的最小覆盖子串。思路:KMP很好的一道题。首先易证:最小覆盖子矩阵一定靠左上角。那么,我们考虑求出每一行的最小重复串长度,所有行的最小重复串的长度的lcm就是最小重复子矩阵的宽。然后我们对列也做相同的操作。于是我们就可以求得最小重复子矩阵的大小了。(这里要注意一点:当所得的宽大于原来的宽时,就让等于原来的宽,长也如此)。算法实现:算法的核心在于高效的求出每一行和每一列的最小重复串,这个可以最原串做一次KMP中的get_ne 阅读全文
posted @ 2013-05-01 15:34 Roly Yu 阅读(207) 评论(0) 推荐(0)