KMP/拓展KMP
sunyutian1998
这个作者很懒,什么都没留下…
展开
-
Substrings HDU - 1238
点击打开链接二分长度 然后枚举第一个串的所有子串 用kmp判断其是否为其他所有串的子串#include <bits/stdc++.h>using namespace std;const int maxn=1e2+10;char ch[maxn][maxn];int len[maxn],nxtt[maxn];char t[maxn];int n;void...原创 2018-01-31 10:39:11 · 246 阅读 · 0 评论 -
Typing practice 牛客网多校
https://www.nowcoder.com/acm/contest/147/F普通kmp中 next[i]为满足 x[i-z...i-1]=x[0...z-1] 的最大 z 值(就是 x 的自身匹配)优化kmp中 next'[i]=next[next[...[next[i]]]](直到next'[i]<0 或者 x[next'[i]]!=x[i])这种优化kmp适合搞这种匹...原创 2018-10-10 15:59:04 · 559 阅读 · 0 评论 -
Revolving Digits HDU - 4333
http://acm.hdu.edu.cn/showproblem.php?pid=4333t是原串 s是两个t拼在一起 exkmp求出s的每个后缀和t的公共前缀长度即可 因为要去掉所有同构串 所以还要跑kmp求出循环节长度#include <bits/stdc++.h>using namespace std;const int maxn=1e5+10;int nxt...原创 2018-10-09 12:52:13 · 164 阅读 · 0 评论 -
Theme Section HDU - 4763
http://acm.hdu.edu.cn/showproblem.php?pid=4763数据水 当初n^2都能过将所给串所有公共前缀后缀长度都找出来 然后二分长度 看中间剩下的那部分是否包含二分的这个公共前缀后缀#include <bits/stdc++.h>using namespace std;const int maxn=1e6+10;int nxtt[...原创 2018-10-08 14:13:38 · 141 阅读 · 0 评论 -
Simpsons’ Hidden Talents HDU - 2594
http://acm.hdu.edu.cn/showproblem.php?pid=2594EXKMP详解https://blog.csdn.net/dyx404514/article/details/41831947EXKMP解法裸题 存模板#include <bits/stdc++.h>using namespace std;const int maxn=5e...原创 2018-10-07 19:49:53 · 296 阅读 · 0 评论 -
String Problem HDU - 3374
http://acm.hdu.edu.cn/showproblem.php?pid=3374详解https://wenku.baidu.com/view/b0ef1be7a6c30c2258019ede.html字符串最大最小表示法 求出起始位置#include <bits/stdc++.h>using namespace std;int go[1000010];...原创 2018-10-07 18:55:09 · 249 阅读 · 0 评论 -
Blue Jeans POJ - 3080
http://poj.org/problem?id=3080KMP解法暴力枚举第一个串的一个子串 看是不是其他所有串的子串 kmp优化一下#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int nxtt[100];char ch[...原创 2018-10-07 10:56:42 · 161 阅读 · 0 评论 -
Clairewd’s message HDU - 4300
http://acm.hdu.edu.cn/showproblem.php?pid=4300题目大意:发送一个密文,为字符串S。这段密文的前半部份是加密过的,后半部分是没有加密过的。现在这段密文被截获,但是密文的尾部的一部份损失了。例如,假设密文是xxxxzzzz, xxxx是加密过的,zzzz是没加密的,因为损失了后面一部份,所以截获的内容可能为xxxxzz, 可以保证截获的内容的无加密...原创 2018-10-07 10:27:58 · 309 阅读 · 0 评论 -
Count the string HDU - 3336
http://acm.hdu.edu.cn/showproblem.php?pid=3336问每个前缀可重叠地出现了多少次KMP解法最笨的方法就是对于每个i 不断找next[i] 看找几次到0 累加一下 即看以i为结尾的字符串中有多少和整个串的某个前缀相等但是aaaaaa直接是n^2 复杂度爆炸 这个过程中很多步都是重复走的 可以用和差分数组类似的方法 在找的过程中不断累加...原创 2018-10-06 21:39:19 · 188 阅读 · 0 评论 -
Seek the Name, Seek the Fame POJ - 2752
http://poj.org/problem?id=2752题目要把所有公共前缀后缀长度求出 那就先求最长的那个 也就是next[l] 然后再找它的公共前缀后缀长度next[next[l]] 即次长的 次次长的KMP解法#include <cstdio>#include <cstring>#include <algorithm>using n...原创 2018-10-06 20:15:25 · 173 阅读 · 0 评论 -
Period HDU - 1358
http://acm.hdu.edu.cn/showproblem.php?pid=1358还是字符串循环节问题 若i%(i-next[i])==0则i-next[i]即为循环节长度 若next[i]==0则代表该前缀只有一个循环节 一般当作没有#include <bits/stdc++.h>using namespace std;const int maxn=1e6+1...原创 2018-10-06 19:56:49 · 216 阅读 · 0 评论 -
Cyclic Nacklace HDU - 3746
http://acm.hdu.edu.cn/showproblem.php?pid=3746求字符串的循环节长度或出现次数当l%(l-next[l])==0时 字符串存在循环节 且长度为l-next[l] 因为在这个条件下 我们不断向前减去l-next[l]长度的串 最后正好剩下一个长度为l-next[l]的串 且和最后l-next[l]个字符组成的串相等 比如abcabcabc与ab...原创 2018-10-06 16:01:32 · 151 阅读 · 0 评论 -
剪花布条 HDU - 2087
点击打开链接kmp存模板求出现次数 不可重叠 (可重叠见注释)推荐博客点击打开链接#include <bits/stdc++.h>using namespace std;const int maxn=1e3+10;int nxtt[maxn],nxts[maxn];char ch1[maxn],ch2[maxn];void kmp(char *t,int...原创 2018-01-29 11:04:08 · 241 阅读 · 0 评论 -
字符串中的最大值 51Nod - 1277
https://www.51nod.com/Challenge/Problem.html#!#problemId=1277和hdu 3666一个套路 求每个前缀的出现次数 最笨的方法就是对每个i不断执行i=next[i] 复杂度n^2 其实差分一下就可以... next[next[i]] next[i] i 这些位置的前缀各出现了 ... 3 2 1次 #include ...原创 2018-12-13 15:28:35 · 228 阅读 · 0 评论