![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
KMP
CoderCat.
大
展开
-
hdu1711_VJkuangbin16kmp_kmp裸题
裸题。。。打个版 #include <cstdio> using namespace std; const int maxn = 1000010; const int maxm = 10010; int n, m; int s[maxn], p[maxm]; int next[maxm]; void getnext() { int i = 0, j = -1; ...原创 2018-06-18 20:45:36 · 121 阅读 · 0 评论 -
hdu1686_VJkuangbin16kmp_
题目大意:给定文本串和模式串,问模式串在文本串中出现了多少次 打板子。。。 #include &lt;cstdio&gt; #include &lt;cstring&gt; using namespace std; const int maxn = 1000010; const int maxm = 10010; int n, m; char s[maxn], p[maxm]; int ne...原创 2018-06-18 21:07:19 · 241 阅读 · 0 评论 -
hdu2087_VJkuangbin16kmp_
题目大意:给定文本串和模式串,问模式串在文本串中出现了多少次(不可重叠) 打板子。。。 #include <cstdio> #include <cstring> using namespace std; const int maxn = 1010; int n, m; char s[maxn], p[maxn]; int next[maxn]; void getne...原创 2018-06-18 21:21:43 · 134 阅读 · 0 评论 -
hdu3746_VJkuangbin16kmp_ Cyclic Nacklace
题目大意:给定一段字符串,问在首和尾至少添加多少个字符,才能使该字符串形成两段循环 next[i]:前i个字符的最长的前缀和后缀的匹配长度 字符串的长度是len,则一个循环节的长度就为len - next[len]; #include <cstdio> #include <cstring> using namespace std; const int maxn ...原创 2018-06-19 09:27:09 · 155 阅读 · 0 评论 -
hdu1358_VJkuangbin16kmp_Period
题目大意:给定字符串的长度m和字符串,问对于前i(2<=i<=m)个字符串,如果该字符串的长度为该字符串的循环节长度的倍数,则输出i和该倍数 循环节长度:cc = i - next[i]; #include <cstdio> using namespace std; const int maxn = 1000010; int next[maxn]; char p[ma...原创 2018-06-19 10:03:13 · 139 阅读 · 0 评论 -
hdu2594_VJkuangbin16kmp_Simpsons’ Hidden Talents
题目大意:给定两个字符串p, s,问最长的p的前缀是s的后缀,输出该前缀和其长度 用p去匹配s,kmp的while退出条件是s的迭代器i >= n,则退出匹配循环后p的迭代器j就为所求前缀的尾部; #include <cstdio> #include <cstring> using namespace std; const int maxn = 50010;...原创 2018-06-19 11:25:07 · 110 阅读 · 0 评论 -
hdu3336_VJkuangbin16kmp_Count the string
题目大意:给定字符串长度m和字符串p,求出该字符串的前缀总数+每个前缀在p中出现的次数 思考:(位置编号1~m)一个以i结尾的前缀,若能在p中找到匹配,且设该匹配的结尾是j,那么就等价于p的子串p[1~j]存在这样一个前缀后缀匹配。而且p的一个前缀也等价于以该前缀的结尾为子串的一个前缀后缀匹配。(这种情况是i==j)。并且可以证明,这样的关系是一一对应的。 问题转化:题目所求&amp;amp;amp;amp;lt;=&amp;amp;amp;amp;gt;...原创 2018-06-20 13:28:19 · 172 阅读 · 0 评论