![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
KMP
吴俊达9812
这个作者很懒,什么都没留下…
展开
-
POJ 2406 字符串循环节
后缀数组处理1e6的字符串会超时(常数比较大),换成hash或kmp对fail数组的又一个理解(移位之后匹配)这题倒着想贼好想,若循环子串,则必然满足 这个 fail 数组的性质,也可证明,满足这个性质即为循环子串#include<cstdio>#include<cstring>typedef long long LL;typedef int lint...原创 2019-06-08 14:40:20 · 481 阅读 · 0 评论 -
hdu5918(KMP求匹配的次数)
题意:分别给出长度为n,m的正整数序列a,b,问a中有多少个起点q,满足从q开始,间隔为p,长度为m的子序列能和b匹配思路:拆成p个串,跑p次kmp。#include <bits/stdc++.h>using namespace std;const int maxn = 1000005;int n,m,p,fail[maxn];void get_fail( int* ...原创 2019-09-24 16:09:12 · 226 阅读 · 0 评论 -
POJ 1961 循环子串
题意:输出每一个前缀的循环节,没有则不用输出。思路:画出循环子串,观察期fail数组的特点。在思考加上什么条件使得fail数组称为判断循环串的充要条件。#include <cstdio>#include <cstring>using namespace std;const int maxn = 1000005;int f[maxn];void get_f...原创 2019-09-24 16:44:00 · 291 阅读 · 0 评论 -
luogu P2375( KMP 难题 )
题意:下课前,园长提出了一个问题:“KMP算法只能求出next数组。我现在希望求出一个更强大num数组一一对于字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作num[i]。例如S为aaaaa,则num[4] = 2。这是因为S的前4个字符为aaaa,其中a和aa都满足性质‘既是后缀又是前缀’,同时保证这个后缀与这个前缀不重叠。而aaa...原创 2019-09-24 21:57:59 · 199 阅读 · 0 评论 -
HDOJ 6153 KMP NEXT数组升华
题意给你两个串 问你第二个串的每个后缀在第一个串出现的长度乘上次数 的和思路:1.每次找最长的符合的位置通过递推来找 2.next数组的预处理#include <bits/stdc++.h>using namespace std;const int maxn = 2000005;const long long mod = 10000000...原创 2019-10-08 11:03:21 · 102 阅读 · 0 评论 -
hdu 3746
题意:补齐字符串使得存在循环节思路:记住一个结论 len-1-f[ len-1 ]就是一个串可能存在的最短的循环节的长度,不够的话在串尾添加一定可行。#include <bits/stdc++.h>using namespace std;const int maxn = 100005;char str[maxn];int f[maxn];void get_fail...原创 2019-10-08 11:37:52 · 69 阅读 · 0 评论 -
Extend to Palindrome UVA - 11475
题意:在结尾补上最少的字符使得原串变成回文串。思路:求最长回文后缀.前缀后缀这种东西上KMP贼好用。#include<bits/stdc++.h>using namespace std;const int maxn=1000005;char s1[maxn],s2[maxn];int fail[maxn];void get_fail( char* P,int *f ...原创 2019-10-08 21:46:04 · 99 阅读 · 0 评论 -
hdu 3336
题意:求一个字符串所有的前缀在这个字符串中出现的次数之和。思路1:kmp把两个串拼接起来。#include <bits/stdc++.h>using namespace std;const int maxn = 500005;const int mod = 10007;char str[maxn],str2[maxn];int f[maxn];typedef lo...原创 2019-10-09 11:17:35 · 87 阅读 · 0 评论 -
洛谷P3375 KMP模板
题意:输出一个字符串在另一个字符串所有出现的位置。#include <bits/stdc++.h>using namespace std;const int maxn = 1000005;char S[maxn],T[maxn];int f[maxn];void get_fail( char* P,int *f ){ f[0] = -1; int m =...原创 2019-10-09 14:34:47 · 124 阅读 · 0 评论