![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
kmp
ssl_yty
这个作者很懒,什么都没留下…
展开
-
【ybtoj 高效进阶 2.3】 【KMP】 公共子串
【ybtoj 高效进阶 2.3】 【KMP】 公共子串题目解题思路找到最短的一个串然后枚举它的开头然后它和自己跑一遍求next然后再用别的串和它跑出最长前缀,取最短的为当前方案答案输出最长到方案答案n也就5,长度不过2000,只是有点难想代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;struct lzf{ char x[2010];}s原创 2021-12-03 19:37:48 · 579 阅读 · 0 评论 -
【洛谷 P2375】 【kmp】 动物园
【洛谷 P2375】 【kmp】 动物园题目解题思路学过kmp的小朋友们肯定知道next维护的是既是它前缀又是它后缀的长度题目讲的一级棒那么我们可以从这推出一个弱化版的numnum求的是不重叠的又是前缀又是后缀的长度设一个ans求的是可重叠的又是前缀又是后缀的长度求ans[i]即是ans[next[i]]+1next[i]本身就既是它的前缀也是它的后缀,所以next[i]的前缀也会是i的前缀因为最后num求的是不重叠的所以我们要保证k 就是i最长的一个不重叠前缀的长度那么可以原创 2021-08-08 11:03:13 · 176 阅读 · 0 评论 -
【gmoj】 【kmp】 字符串匹配
【gmoj】 【kmp】 字符串匹配题目解题思路关于忘了kmp怎么打这件事 qwq将Y串复制n遍和X串匹配X作为Y的子串 会出现在两种地方 Y串以内 或 两个Y串之间这种题非kmp莫属啦求一遍Y串内有多少个子串X再将两串接在一起求一次取Y队尾的|X|-1个,对头的|X|-1个,多拿了可能包括了原先在Y串内的子串代码#include<iostream>#include<cstring>#include<cstdio>using namesp原创 2021-07-22 16:14:06 · 76 阅读 · 0 评论 -
【ybtoj 高效进阶 2.3】 【kmp】 子串拆分
【ybtoj 高效进阶 2.3】 【kmp】 子串拆分题目解题思路要求所有满足形如A+B+A的所有子串先枚举左边界l跑一遍l到len的kmp然后枚举右边界找到公共前后缀如果其长度*2大于等于当前子串的长度就向前取next的值最后判断其长度是否大于等于k满足即累加代码#include<iostream>#include<cstring> #include<cstdio>using namespace std;char x[20020原创 2021-03-20 10:29:57 · 97 阅读 · 0 评论 -
【ybtoj 高效进阶 2.3】 【kmp】 周期长度和
【ybtoj 高效进阶 2.3】 【kmp】 周期长度和题目解题思路题目出得奇奇怪怪,一点都不可爱首先要将x的前缀都做一遍kmp所谓最大周期即找一个最短的公共前后缀这个前后缀可以通过一直向前那next值找到,可用类似并查集的方法优化用总长减去这个前后缀的长度图解好吧,有点简陋代码#include <iostream>#include <cstring>#include <cstdio>using namespace std;char原创 2021-03-20 10:09:03 · 84 阅读 · 0 评论 -
【ybtoj 高效进阶 2.3】【kmp】 重复子串
【ybtoj 高效进阶 2.3】【kmp】 重复子串题目解题思路将每一个串和自己匹配处理出next数组可以得知 xxx[1…nextnextnext[lenlenlen]] 与 xxx[lenlenlen-nextnextnext[lenlenlen]…lenlenlen] 是完全匹配的如果总长度除以这个子串的长度没有余数说明ta就是由重复连续子串组成的代码#include <iostream>#include <cstring>#include <原创 2021-03-20 09:27:40 · 80 阅读 · 0 评论 -
【ybtoj 高效进阶 2.3】 【kmp】 子串查找
【ybtoj 高效进阶 2.3】 【kmp】 子串查找题目解题思路kmp模板题kmp的策略是调整 kkk 点位置(减小 kkk 值)并使 kkk 值尽量大,使得 AAA[iii-jjj+1…iii]=BBB[1…jjj] 保持匹配且尝试匹配AAA[iii+1]与BBB[jjj+1]板子for (int i=1;i<=len1;i++) { while (k!=0&&x[i]!=y[k+1]) k=next[k]; if (x[i]==y[k+1]) k++;原创 2021-03-20 08:44:47 · 99 阅读 · 0 评论 -
【洛谷 P3375】 kmp字符串匹配 题解
【洛谷 P3375】 kmp字符串匹配 题解题目样例inputABABABCABAoutput130 0 1explain对于 s 2 长度为 3 的前缀 ABA,字符串 A 既是其后缀也是其前缀,且是最长的,因此最长 border 长度为 11。数据范围解题思路kmp模板题一个不知道什么鬼鬼的东东按照暴力的思维来想就是找到一个相同的然后循环判断是否所有相等而kmp比较牛ta使用next数组存储上一对相同的位置如果当前位置的数和上一对不一样就再往上找上原创 2020-10-26 21:07:37 · 188 阅读 · 0 评论