![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
kmp
skymeteorite
这个作者很懒,什么都没留下…
展开
-
hdu2203kmp
http://acm.hdu.edu.cn/showproblem.php?pid=2203 题意 给出主串 模式串 主串可以滚动,即1234->2341, 文能否匹配 可以将主串变为 主串+主串,这样所有的情况就都在内了#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int原创 2016-04-07 11:33:39 · 401 阅读 · 0 评论 -
hdu4763kmp
题目大意是给你已给串,让你去找到一个子串,使得子串的与该串的前缀和后缀串相等,且三个串不重复。 此题其实是要求对KMP的next数组有深刻的认识,通过自己匹配自己,求出next数组,代表了前i的字符前缀和后缀相等的最长长度,因此在计算出next数组后只需从len-1开始查找是否满足前缀等于前len-1个串的后缀,并且满足原串的后缀,因此需要在用一个数组fg标记一下原串后缀能达到的长度,切让他满足和原创 2016-03-25 12:06:55 · 687 阅读 · 0 评论 -
hdu3336kmp,dp
找出前缀后,算出现次数,很明显的是一个单模式串匹配问题,KMP 可以很好的解决,不过如果直接这样暴力的话,O(n^2) 的复杂度还是不行的。。。因此,我们试着考虑 KMP 算法进行快速匹配的本质核心所在,其实就是 next[] 数组而这个的本质其实就是 S[1..next[i]]=S[i-next[i]+1…i] 即模式串的最长公共前后缀串的长度举个例子 ababa 我们要算这个字符串的前缀的出现次原创 2016-03-24 21:16:27 · 574 阅读 · 0 评论 -
hdu3746kmp
题意 在字符串前面或后面添加若干个字符使之首尾相连后能够成循环(最少循环两次),求最少添加的字符个数。无论添加前面或后面结果一样不如就加在后面。 样例aaa next[]为0 0 0 abca next[]为0 0 0 1; abcde next[]为0 0 0 0 0; abcabca next[]为0 0 0 1 2 3 4; 发现规律len-next[len-1]即为循环节的最短原创 2016-03-24 19:56:31 · 437 阅读 · 0 评论 -
hdu2594kmp
是kmp的模板,应该理解next[]数组的应用#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int MAXN=50005;char s1[MAXN],s2[MAXN];int Next[MAXN];void getNext(int len){ int k=0;原创 2016-03-24 19:48:06 · 802 阅读 · 0 评论 -
xmu1451kmp
http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1451给出两个长度相同的串 问能否经过移动是两串相等 abcd->bcda 输出移动的长度可以将第一个串重复一下变成两倍当做文本串,用另一个去匹配#include <iostream>#include <cstdio>#include <cstring>using namespace std原创 2016-04-11 21:01:53 · 270 阅读 · 0 评论 -
hdu1358kmp串循环节
http://acm.hdu.edu.cn/showproblem.php?pid=1358 题意 给出一个串,求其有循环节的前缀的最小循环节如果对于next数组中的 i, 符合 i % ( i - next[i] ) == 0 && next[i] != 0 , 则说明字符串循环,而且最小循环节长度为: i - next[i] 因为next数组失配的时候,总是回溯到最近的循环节,所以i-原创 2016-04-07 12:24:18 · 293 阅读 · 0 评论 -
转 kmp详解
1.kmp算法的原理: 本部分内容转自:http://www.cnblogs.com/c-cloud/p/3224788.html及 http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html字符串匹配是计算机的基本任务之一。举例转载 2016-03-24 19:03:24 · 438 阅读 · 0 评论 -
hdu2222ac自动机入门
http://acm.hdu.edu.cn/showproblem.php?pid=2222 给出一些单词,再给出一个文本,求文本中这些单词的出现次数 网上好多版本,找了一个比较容易理解的学习#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;#define原创 2016-03-29 19:54:53 · 280 阅读 · 0 评论 -
hdu2896ac自动机模板
http://acm.hdu.edu.cn/showproblem.php?pid=2896题意 给出多个病毒字符串 再给出多个文本串 记录每个文本串中带病毒串的编号和数量 模板,只要记录一下病毒的编号就可以了。可见的ASCI是32到127,n为95可以,#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ios原创 2016-03-30 19:31:31 · 253 阅读 · 0 评论 -
hdu3065ac自动机
http://acm.hdu.edu.cn/showproblem.php?pid=3065 还是模板,和上一题差不多#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;const int maxn=50001原创 2016-03-30 20:03:42 · 224 阅读 · 0 评论 -
zoj3228AC自动机
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/D0状态时就是模板,1时判断一下后匹配的位置减前面的距离是不是大于当前单词的距离#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <queue>原创 2016-04-01 19:41:07 · 445 阅读 · 0 评论 -
hdu5918kmp
给出两个串,和一个p,子串只能每隔p匹配母串,问子串能匹配母串多少次, 用的o(mlogn)就水过#include<cmath>#include<cstdio>#include<cstring>#include<iostream>typedef long long LL;using namespace std;const int maxn=1e6+5;typedef long lon原创 2016-10-04 16:18:45 · 102 阅读 · 0 评论