
KMP
九野的博客
这个作者很懒,什么都没留下…
展开
-
HDU 1358 Period 求前缀长度和最小循环节长度
题意:求该字符串(前面一部分)存在循环的最小循环节是多少,输出所有满足该条件的 前缀长度和最小循环节长度#include char P[1000010];//从0开始存int f[1000010];//记录P的自我匹配int Len;void getFail(){ int m=Len; f[0]=f[1]=0; for(int i=1;i<m;i++){ int j=f[i原创 2013-08-09 16:19:45 · 2113 阅读 · 1 评论 -
Codeforces 526D Om Nom and Necklace kmp+hash
题目链接:点击打开链接题意:给出长度为n的字符串,常数k下面一个长度为n的字符串。问:for(int i = 1; i 字符串的前i个字符 能否构成 形如A+B+A+B+A+B+A的形式,其中A有k+1个,B有k个 A和B是2个任意的字符串(也可以为空串)若可以构成则输出1,否则输出0}思路:POJ1961 先用kmp求一个前缀循环节,。我们观察 A原创 2015-04-05 22:21:27 · 1805 阅读 · 0 评论 -
HDU 4125 Moles 线段树+KMP
题意:给定n,下面是1-n的排列。下面一个二进制子串。先按给定的排列建出二叉树。然后遍历树(根->左子树->根->右子树->根)遍历这个节点时 若权值为奇数入栈一个1,若为偶数入栈一个0得到一个母串。问母串中出现了几次子串。思路:先是建树得到母串,然后求子串个数就是裸的KMP。建树就是找个规律,然后用线段树维护一下输入的排列#include #原创 2014-11-09 14:38:57 · 1972 阅读 · 0 评论 -
KMP模版
//刘汝佳版,下面T是长的字符串,f是失配数组#include char T[10000],P[100];//从0开始存int f[100];//记录P的自我匹配void getFail(char *P,int *f){ int m=strlen(P); f[0]=f[1]=0; for(int i=1;i<m;i++){ int j=f[i]; while原创 2013-08-09 20:07:07 · 3187 阅读 · 1 评论 -
URAL 1732 Ministry of Truth KMP
题目链接:点击打开链接题意:给定母串a和原创 2014-09-18 16:27:54 · 1139 阅读 · 0 评论 -
CodeForces 25E Test KMP
题目链接:点击打开链接题意:给定3个字符串,进行拼接重复的一段可以覆盖,问拼接后最小的长度(若一个串s1是s2的子串,则s1可以认为嵌入了s2内,不需要进行拼接思路:kmp搞一下。#include #include #include #include #include #include using namespace std;#define N 300005原创 2014-07-02 19:58:19 · 1514 阅读 · 0 评论 -
Uva 12012 Detection of Extraterrestrial 求循环节个数为1-n的最长子串长度 KMP
题目链接:点击打开链接题意:给定一个字符串str 求字符串str的循环节个数为 1-len 个的最长子串长度思路:套用kmp的性质#include#include#include using namespace std;#define n 1300void getnext(char str[n],int next[n]){ int m=strlen(str);原创 2014-05-08 13:13:40 · 1531 阅读 · 0 评论 -
POJ 2406 最小循环节 KMP裸题
#include#include#include#include#include#include#include#includeusing namespace std;#define N 1000010char s[N];int f[N];void getFail(char *P){ int i = 0, j = -1; f[0] = -1; while(P[i]){原创 2014-01-31 20:09:36 · 1593 阅读 · 0 评论 -
HDU3068 URAL1297 Manacher求最长回文子串
#include#include#includeusing namespace std;#define N 225000//dp[i] 表示以i点为中心向右最大回文长度//则答案就是max(dp[i]) -1int dp[N];char P[N], T[N];//在每一个字符间插入# 这样得到的回文串长度一定是奇数(包含#)int Have_P(){原创 2013-12-16 17:04:30 · 1823 阅读 · 0 评论 -
HDU 2087 KMP裸题
#include#include#define N 1005int f[N], ans;char P[N], T[N];void getFail(int len){ int i, j; j = f[0] = -1; i = 0; while(i < len) { while(j!=-1 && P[i]!=P[j])j = f[j]; i++,原创 2013-12-16 14:46:56 · 1761 阅读 · 0 评论 -
HDU 1867 KMP 求最大尾部重叠
题意:给定2个字符串,a-b 或 b-a 尾部相同部分只输出一次求长度最小的字符串(长度相同则字典序最小)#include#include#include#includeusing namespace std;#define N 200050int f1[N], f2[N];char s1[N], s2[N];void getFail(i原创 2013-12-16 19:54:04 · 1626 阅读 · 0 评论 -
POJ 1961 KMP 求前缀循环节 位置及次数
#include#include#define N 1000100char T[N];int f[N], len;void getFail(){ f[0] = f[1] = 0; for(int i = 1; i < len; i++) { int j = f[i]; while(j && T[i]!=T[j]) j = f[j]; f[i+1]原创 2013-11-19 13:15:20 · 1789 阅读 · 0 评论 -
跟着wuyiqi巨巨学KMP KMP题集
http://www.cnblogs.com/wuyiqi/archive/2012/01/05/2313746.html转载 2013-11-01 18:46:41 · 2233 阅读 · 0 评论 -
HDU 3746 KMP 求最少需要在结尾后面补几个字符才能凑成至少两个循环
题意:T个测试数据对于每个字符串,问最少需要在结尾补几个字符可以凑成至少2个循环 思路:f【len】表示前缀与后缀的最大匹配,理解这个就方便做了 #include #include char P[200100];//从0开始存int f[200100];//记录P的自我匹配int len;void getFail(const char *p) /原创 2013-11-02 10:46:04 · 1589 阅读 · 0 评论 -
HDU 3336 KMP 求所有前缀在母串中出现的次数
题意:T个测试数据n表示母串长度下面给定母串 问母串的所有前缀,在母串中出现的次数和 #include #include char P[200100];//从0开始存int f[200100];//记录P的自我匹配int len;void getFail(){ f[0]=f[1]=0; for(int i=1;i<len;i++){原创 2013-11-01 23:09:42 · 1861 阅读 · 0 评论 -
HDU 1711 Number Sequence KMP裸题
这个是MP,没有对f 数组优化过,所以说KMP有点不准确#include int a,b;int T[1000010],P[10010];//从0开始存int f[10010];//记录P的自我匹配void getFail(){ int m=b; f[0]=f[1]=0; for(int i=1;i<m;i++){ int j=f[i]; while(j&&P[i]!=P原创 2013-08-09 15:45:13 · 1575 阅读 · 0 评论 -
HDU 4749 && POJ 3167 KMP
RT这个题是POJ3167的修改版,基本一致 #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;const int N = 100原创 2013-09-21 18:02:36 · 3209 阅读 · 1 评论 -
Codeforces 536B Tavas and Malekas 求自身首尾的重叠位置 KMP
题目链接:点击打开链接题意:用小写字母构造n长的串S,m个要求字符串P下面m个位置。a1, a2···am(输入有序)要使得字符串S的以ai 开头且后面是一个P串。问构造的方法数思路:实际上,对于ai, ai+1 ,两个位置,如果这两个位置会相互影响(即 ai+1 - ai 复制一个和P一样的串P‘把P放在ai位置,把P‘放在ai+1位置,那么只需要判断一下原创 2015-04-15 13:57:08 · 1579 阅读 · 0 评论