![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
KMP
M18
当你还不能写出自己满意的程序时,你就不要去睡觉。
展开
-
HDU 3336 Count the string
题意:问你所有前缀包含本身出现的次数是多少、 首先,不得不在这给大家叙说一个问题,那就是这道题的数据很弱,很多有BUG的代码,也能过、在这,还是希望按照正确的思路,正确的做法来AC这道题、对于这道题,我本身也是做过了这道题的,其实我刚开始的思路完全错误,不过我AC了、 我朋友在做这道题的时候,问了我一组数据,就是abababab这种情况的时候输出20、思路:这道题的思路是KMP+DP的原创 2015-09-09 01:28:41 · 228 阅读 · 0 评论 -
HDU 2087
题意:给出两个字符串,在第一组字符串找出第二组字符串、 并且不可以重叠、因为题意要求的是减出多少个第二个字符串,并不是找到、思路:根据next数组的性质,每次当我找到第二组字符串时,一定要将j初始化为0、 因为next数组找的是前后缀相同的最值、那么既然我找到了一个便一定要将其重新初始化、 因为题意要求不可重叠、而next数组找的是可以重叠的、 其他的就没什么需要注意的了。AC代码:原创 2015-09-06 10:54:32 · 239 阅读 · 0 评论 -
HDU 1358
题意:给你一组字符串,问从第二个位置开始,前n个字符串是否循环,循环的位置,以及循环的次数、思路:next数组最基本的两大特点之一,找出当前的循环节,以及循环长度、 再判断是否循环,直接输出当前串的长度/循环节的长度便可、唯一需要注意的就是最后多了个换行、AC代码:#include#includeconst int maxn=1000000;int lent;char T[ma原创 2015-09-06 11:18:37 · 482 阅读 · 0 评论 -
HDU 1711
题意:给出两组数,第二组数是否在第一组数里面,一定连续、思路:最基本的KMP、 自己写的时候wr了、 发现第二组数,按照题意里面给的数组大小过不去、 开大点就过了、AC代码:#include#includeconst int maxn=1000000;const int maxm=100000;int S[maxn];int T[maxn];int next[maxm];原创 2015-09-06 10:06:52 · 237 阅读 · 0 评论 -
HDU 1686
题意:给你两组字符串,问第一组串在第二组串中出现了多少次、串一定要连续、 并且串可以重叠、思路:最基本KMP 将next数组计算出来然后,直接求解KMP就可以了、由于next数组中找的是前缀和后缀相同的最大值、 所以,就算重叠,也一样可以进行匹配、无需特殊处理、AC代码:#include#includeconst int maxn=1000001;const int maxm=1原创 2015-09-06 10:19:52 · 217 阅读 · 0 评论 -
HUST 1010 The Minimum Length
题意:有一个字符串A,将A复制很多次变为新字符串 AAAAA........ 然后,在新字符串中 切出一部分、为B,那么现在给出你B串,问A串最短的长度为多少?思路:按照题意,切出的B串一定是包含部分A串的、 根据KMP中next数组的性质,next数组中存储的是最近回溯的位置,只需找到最后一位的长度便可求出循环节的长度、AC代码:#include#includeconst int原创 2015-09-06 19:24:14 · 260 阅读 · 0 评论 -
POJ 2406 Power Strings
题意: 其实就是查看该字符串是否循环,让你求出他的最大循环次数、思路:next数组性质、 长度最大时,循环次数最大、 if(len%(len-next[i])==0&&next[len) printf("%d",len/(len-next[len]));AC代码:#include#includeconst int maxn=1100000;char T[maxn];int ne原创 2015-09-07 10:11:16 · 290 阅读 · 0 评论 -
POJ 2752 Seek the Name, Seek the Fame
题意: 给出你一行字符串,输出在这行字符串中既是前缀又是后缀的字串的长度、思路:KMP中,next数组的性质、因为next数组求解的就是前后缀相同的个数、首先他自己本身一定是相同的,然后根据next数组依次向前跳跃、最后按照从小到大输出便可、AC代码:#include#includeconst int maxn=400200;char T[maxn];int lent,next原创 2015-09-08 11:43:33 · 205 阅读 · 0 评论