![](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 · 474 阅读 · 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 · 220 阅读 · 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 · 281 阅读 · 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 · 187 阅读 · 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 · 92 阅读 · 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 · 66 阅读 · 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 · 94 阅读 · 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 · 85 阅读 · 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 · 115 阅读 · 0 评论