
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 · 380 阅读 · 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 · 319 阅读 · 0 评论 -
2021.07.22【NOIP提高B组】模拟 字符串匹配
思路:这题直接暴力KMPcodecodecode#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 · 105 阅读 · 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 · 123 阅读 · 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 · 100 阅读 · 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 · 135 阅读 · 0 评论 -
1438骑马修栅栏
Description农民John每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。John是一个与其他农民一样懒的人。他讨厌骑马,因此从来不两次经过一个一个栅栏。你必须编一个程序,读入栅栏网络的描述,并计算出一条修栅栏的路径,使每个栅栏都恰好被经过一次。John能从任何一个顶点(即两个栅栏的交点)开始骑马,在任意一个顶点结束。每一个栅栏连接两个顶点,顶点用1到500标号...原创 2019-12-20 18:38:12 · 107 阅读 · 0 评论