![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
KMP
KMP
VL——MOESR
ga
展开
-
【YBTOJ进阶训练指导】字符串匹配【KMP】
思路: 很显然想到一种思路,把kmp的匹配模式改为当前位字符和上次出现位置的相对距离进行匹配 然后做法就很显然 同时处理一种特殊情况,如果位置差大于匹配长度时,直接视为没有出现过 codecodecode #include<iostream> #include<cstring> #include<cstdio> #define solve(x, y) (x<y?x:0) using namespace std; int t, t1; int n, m, ..原创 2022-02-16 20:34:57 · 320 阅读 · 0 评论 -
【YBTOJ进阶训练指导】字符串题【KMP】
思路: 因为pre是长度为i的前缀的最短循环节长度,所以直接用它求出next 然后根据KMP的next的生成过程,i+1和j+1相等时next才更新,那么如果next为0,就直接把所有可以使next更新的字符全部搞掉,然后选剩下的。如果next不为0,那根据生成过程就直接为s[next] codecodecode #include<iostream> #include<cstdio> using namespace std; int n; int pre[1010100],..原创 2022-02-16 19:47:28 · 290 阅读 · 0 评论 -
2021.07.22【NOIP提高B组】模拟 字符串匹配
思路: 这题直接暴力KMP codecodecode #include<iostream> #include<cstring> #include<cstdio> using namespace std; string s, t; long long n; long long next[1010000]; int main() { scanf("%lld", &n); n--; cin>>s>>t; string ss; ..原创 2021-07-22 15:32:03 · 77 阅读 · 0 评论 -
【YBTOJ】子串拆分
思路: 我们可以直接枚举左端点,然后用一遍KMP寻找以这个左端点有多少个如题的字符串,至于具体怎么查找kmp本身的原理和它就是相同的。 codecodecode #include<iostream> #include<cstring> #include<cstdio> using namespace std; int l; char s[1001000], ss[1001000]; int next[1000100]; int main() { scanf(..原创 2021-03-26 19:20:23 · 90 阅读 · 0 评论 -
【YBTOJ】周期长度和
思路: 我们可以把周期理解为一个字符串复制一次可以包含另一个字符串 那么我们考虑对于abababa的周期 显然是ababab 既然ababa是它的最长前缀,那么我们可以考虑继续在里面寻找是否有更小的剩余长度 aba,很显然 再找,发现是a 那么我们就求出了答案 codecodecode #include<iostream> #include<cstdio> using namespace std; int n; char s[1000100]; int next[10010..原创 2021-03-24 17:12:45 · 73 阅读 · 0 评论 -
【YBTOJ】重复子串
思路: 首先我们知道,1到i和n-i+1到n匹配的话,那么这被分出来的三段都是相等的 那么我们就好求了 codecodecode #include<iostream> #include<cstring> #include<cstdio> using namespace std; string s; int next[1000100]; int main() { cin>>s; while(s!=".") { memset(next, 0,..原创 2021-03-24 17:08:33 · 98 阅读 · 0 评论 -
1438骑马修栅栏
Description 农民John每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。 John是一个与其他农民一样懒的人。他讨厌骑马,因此从来不两次经过一个一个栅栏。你必须编一个程序,读入栅栏网络的描述,并计算出一条修栅栏的路径,使每个栅栏都恰好被经过一次。John能从任何一个顶点(即两个栅栏的交点)开始骑马,在任意一个顶点结束。 每一个栅栏连接两个顶点,顶点用1到500标号...原创 2019-12-20 18:38:12 · 89 阅读 · 0 评论