KMP
·马克图布·
如果人生真的可以分为几个阶段的话,那么我现在就在感觉自己很普通,并一无是处的那个阶段。
展开
-
hdu2087 剪花布条(KMP)
Problem Description一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?Input输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则...原创 2019-12-07 18:46:16 · 129 阅读 · 0 评论 -
FZU1901 Period II(KMP)
题意:让你求所有的周期p,使得S[i]=S[i+P] for i in [0..SIZE(S)-p-1],成立。思路:S[i]=S[i+P] for i in [0..SIZE(S)-p-1], 其实就是让你输出所有的(完整或者不完整)循环节的长度。我们知道 n - Next[n]是最小的循环节,如果 n% (n - Next[n]) == 0 ,的话,就是完整的。所以我们每次让Nex...原创 2019-11-18 21:28:29 · 142 阅读 · 0 评论 -
hdu 3374 String Problem(最小 / 大 表示法 + KMP)
题意:给你一个字符串,让你输出这个字符串最小表示的起始位置 ,数量 和 最大表示的起始位置,数量。思路:套个最小表示法 和 最大表示法的模板 ,然后数量的话,用KMP 判断这个串是不是循环串。AC Code:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1...原创 2019-11-09 16:27:08 · 152 阅读 · 0 评论 -
hdu2203 亲和串(KMP)
亲和串 Time Limit: 3000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 20359Accepted Submission(s): 8898 Problem Description ...原创 2019-10-25 15:10:14 · 167 阅读 · 0 评论 -
hdu6153 A Secret(KMP + DP)
题意: 给你两个字符串 t 和 s,然后让你计算 s的后缀在 t中出现的次数* 后缀的长度 累加的 和 。思路:考虑KMP ,因为 KMP 是匹配前缀的所以,需要倒转字符串。然后设dp数组为 长度 为 i的前缀 在 t中出现 的次数 ,在 KMP 匹配的过程中,每次 dp[j] ++。但是,KMP算法为了减少 回溯,会省略相同长度字符的匹配,即Next[i] 代表着非前缀 后缀的...原创 2019-10-24 21:59:13 · 395 阅读 · 0 评论 -
51Nod 1277 字符串中的最大值(KMP + DP)
题意:给你一个字符串,然后让你找该字符串 的前缀出现次数 * 长度的最大值。思路:KMP + dp。先KMP求出next数组。设dp[i] 代表 i长度的 前缀出现的次数。那么 对应着 i 有 dp[ next[i] ] += dp[i]因为 Next数组的含义 是非前缀的后缀子串 与该字符串前缀 匹配的 最大长度,即对应着Next[i],如果Next[i] 不等于0 的话,...原创 2019-10-24 20:29:13 · 192 阅读 · 0 评论 -
LOJ 1258 - Making Huge Palindromes(KMP | Manacher)
题意:给你一个字符串,然后让你添加最少的字符使得这个字符串变为一个回文串,只能在尾部添加。思路:因为只能在尾部添加,所以我们只需要求一个最长的回文后缀,然后把这个后缀之前的字符添加到尾部就可以实现添加最少的字符使得这个串变为一个回文串。最后的长度 = 2 * len - ans (len为字符串的长度,ans为最长回文后缀的长度,考虑容斥原理,现在尾部添加这个字符串的翻转字符串,这个字符串一...原创 2019-10-24 14:40:05 · 224 阅读 · 0 评论 -
hdu5510 Bazinga(KMP 剪枝) !!
题意:给你一系列字符串,编号为1 - n ,然后让你找一个下标最大的串,在它之前存在一个串不是这个串的子串,如果有则输出这个串的 下标,如果没有则 输出 - 1。思路:KMP匹配。一看数据都挺小,直接匹配,结果TTTTTT............到这时,我仍旧没有什么好的想法,就看了看别人的题解,发现别人只是比我多了一个小小的剪枝,就跑的贼快。多设一个vis数组,标记已经匹配成功的较小...原创 2019-10-23 14:58:10 · 191 阅读 · 0 评论 -
poj2185 Milking Grid(KMP)
题意:给你一个n*m字符矩阵,然后让你找一个子矩阵,这个字符矩阵可以由这个子矩阵(若干个)覆盖(可以重叠)。然后输出这个子矩阵的最小面积。思路:一开始没想到怎么用KMP,看到别人的博客恍然大悟,相当于把多维矩阵映射成一个字符串处理。矩阵的面积 = 长 * 宽。找长度最小的长,把每一列看做一个字符。进行KMP匹配即可。 l = m - Next[m]找长度最小的宽 ,把每行看做一个...原创 2019-10-22 21:19:33 · 182 阅读 · 0 评论 -
poj3080 Blue Jeans(KMP 枚举 | KMP 二分)
题意是在给定的所有字符串中寻找一个最长子串且这个长度大于3,有相同长度的输出字典序最小的子串。思路:枚举第一个子串的所有大于3的子串,在带入其他字符串中用KMP匹配。400+msAC Code:#include<iostream>#include<cstring>#include<queue>#include<map>#in...原创 2019-10-22 11:38:19 · 201 阅读 · 0 评论 -
hdu4763 Theme Section(KMP)
题意 :给你一个字符串,然后让你找一个子串,这个子串需要作为前缀、后缀 和 在中间出现。输出这个子串的最大长度。思路:依旧是Next 数组的性质。首先明白Next数组的含义,Next[i] 表示 以 i 结尾的非前缀子串与前缀匹配的最大长度。所以,整个字符串的后缀入手,如果Next[m] = 0,则肯定不存在这种子串,输出0即可。否则 Next[m] 肯定等于等于一个数,假设Next[m]...原创 2019-10-21 21:21:50 · 176 阅读 · 0 评论 -
poj2594 Simpsons’ Hidden Talents(KMP | 扩展KMP)
题意:给你两个字符串s 和 t,让你找一个最长的字串,它是s的前缀 ,也是t的后缀,如果没有输出0,否则输出这个字符串和最大的长度。思路:很基础的KMP,一开始没转过来这个弯,主要是对KMP算法中f[ ] 数组的含义不是很清楚。f[ i ] 的含义 为 B中 以 i 结尾的子串 与 模式串 A的前缀能够匹配的最长长度。所以本题中,以s为模式串,t为文本串 求出 f[ ] 数组即可,f...原创 2019-10-21 19:19:29 · 173 阅读 · 0 评论 -
hdu3746 Cyclic Nacklace(KMP)
题意:给你一个字符串,然后问你添加几个字符能凑成循环串。思路:很显然,k = m / ( m - Next[m]) 为已经出现的循环节次数,l = m - Next[m] 表示循环节长度。用总的长度m - l *k为某一循环节剩余长度,然后再用 l - 剩余长度就是答案。AC Code:#include<iostream>#include<cstring>...原创 2019-10-21 15:12:33 · 107 阅读 · 0 评论 -
hdu3336 Count the string(KMP) !!!
题意:给你一个字符串s,然后让你输出s中所有前缀在s中出现次数的和。例如 abab ,a 2 ,ab 2 ,aba 1,abab 1 ,统计和为 6。.思路:看网上有众多思路。看kuangbin说这题可以直接求出扩展KMP的Next数组。然后直接加和就行。还有KMP + dp,还有直接利用KMP做的,主要看如何转化题意,还有对KMP Next数组的理解。1、e-KMP扩展KM...原创 2019-10-20 12:08:38 · 195 阅读 · 0 评论 -
poj3461 Oulipo(KMP匹配)
题意:T组样例,每组给你个模式串和一个文本串,问模式串在文本串中出现几次。思路:KMP模板题。AC Code:#include<iostream>#include<cstring>#include<queue>#include<map>#include<stack>#include<cmath>#in...原创 2019-11-01 14:40:39 · 127 阅读 · 0 评论 -
poj2406 Power Strings(KMP求循环节出现次数)
题意:给你 a = "abc" and b = "def" then a*b = "abcdef",定义字符串相乘,再给你 a^0 = "" (the empty string) and a^(n+1) = a*(a^n). 定义字符串的幂。然后给你一个字符串,求n最大是多少。思路:n最大是多少,就是说最多是多少个循环节所构成这个字符串。所以求完Next数组直接判断即可。AC Cod...原创 2019-10-19 21:55:27 · 185 阅读 · 0 评论 -
poj1961 Period(KMP求周期性循环节)
题意:给你一个字符串,然后让你看看有没有前缀的循环节大于1,如果有,输出前缀的长度和循环节大小。思路:判断字符串是否是周期性字符串:i % (i - Next[i] )==0 ,循环节长度 i - Next[i] ,循环节出现次数为 i / (i - Next[i])。AC Code:#include<iostream>#include<cstring>...原创 2019-10-19 21:37:39 · 233 阅读 · 0 评论 -
hdu1711 Number Sequence(KMP)
题意:让你匹配两个整数数列,输出第二个数列在第一个数列中第一次出现的位置,没有则输出-1。思路:KMP模板题。AC Code:#include<iostream>#include<cstring>#include<queue>#include<map>#include<stack>#include<cmath...原创 2019-10-19 20:58:23 · 143 阅读 · 0 评论 -
hdu6740 MUV LUV EXTRA(KMP求循环节)
题意:给你一个浮点数,知道他是一个无限循环小数,然后给你一个a和b,让你计算这个字符串的可靠程度。可靠程度 = a*当前已经出现循环节的长度 - b*循环节长度。思路:考察next数组的性质。循环节长度 = i - next[i] 所以只需要把小数倒转求一次next数组就可以了。AC Code:#include<iostream>#include<cstrin...原创 2019-10-15 20:04:39 · 233 阅读 · 0 评论 -
P3375 【模板】KMP字符串匹配
题目描述如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置。为了减少骗分的情况,接下来还要输出子串的前缀数组next。(如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了。)输入格式第一行为一个字符串,即为s1第二行为一个字符串,即为s2输出格式若干行,每行包含一个整数,表示s2在s1中出现的位置接下来1行...原创 2019-09-08 08:30:31 · 172 阅读 · 0 评论 -
19徐州icpc网络赛 Carneginon(KMP)
题意就是让你判断一个字符串是否是另一个字符串的子串。思路:正解KMP。然而,我就是想吐槽一下这个数据得有多水,然我这种渣渣,string ::find都过了,find可是的复杂度啊。。。一份凌乱的伪AC 代码:#include<bits/stdc++.h>using namespace std;int main(){ string s1,s2,s; ...原创 2019-09-08 08:31:06 · 216 阅读 · 0 评论