KMP
Anoyer
这个作者很懒,什么都没留下…
展开
-
HDU-4300-Clairewd’s message(KMP+特判)
博主链接题目题意:先给你一个密码表。然后给你一个不一定完整的串。原串满足前一半是密码,后一半是明码。要求你最小的补全这个串。题解:设给的串长度为len,则1…(len+1)/2的字母一定是密码。我们将1…(len+1)/2的字母全部安装密码表转换成原文,然后将得到的串求Next数组。再根据Next数组求出最大的相等的前后缀(长度一定小于或等于len/2,题目要求),然后输出就可以。然后...原创 2018-09-30 14:47:15 · 716 阅读 · 0 评论 -
HDU - 2087-减花布条(裸KMP模板)
博主CSDN题目链接题意:中文题面,题意也说得非常清楚了,给一个文本串,求文本串中有多少个不重复的模式串题解:kmp标准做法,甚至基本没有变动。 判断的时候,每当完整的匹配一次之后令j=0,ans++,即模式串的下标从0开始,匹配数量加1代码:#include<iostream>#include<algorithm>#include<cstdio&am原创 2018-12-03 21:36:27 · 287 阅读 · 0 评论 -
HDU-1711-Number Sequence(数组跑KMP)
博主CSDN题目链接题意:给你两个数组的所有元素,让你对它们进行匹配,当位置为多少时候它们能完全匹配。题解:直接跑KMP就可以了,唯一注意的…emmm…应该不用注意吧,也就原先是字符串,现在把字符串换成数组超级大水题代码:#include<stdio.h>#include<bits/stdc++.h> using namespace std;int s...原创 2018-12-03 21:35:30 · 184 阅读 · 0 评论 -
HDU-1841-Find the Shortest Common Superstring(kmp)
博主CSDN题目链接题意:给出两个串,用这两个串组成一个新串,使新串包含这两个串,问这个新串的长度最小是多少;题解:显然,对于两个串A,B;A如果是B的子串或者B如果是A的子串的话,直接输出那个母串的长度即可,如果没有这种关系,那么看一个串的后缀是否是另一个串的前缀,如果某个串的后缀与另一个串的前缀的公共部分最长,则答案=A.length+B.length-公共长度,所以可以直接用km...原创 2018-12-03 21:33:08 · 278 阅读 · 0 评论 -
HDU-3746-Cyclic Nacklace (KMP求循环节)
博主链接题目链接Sample Input3aaaabcaabcdeSample Output025题意:给你一些串,问如果想让这个串里面的循环节至少循环两次,需要添加几个字符(只能在最前面或者最后面添加)。比如ababc 需要添加5个就是添加ababc。题解:利用Next数组的性质:符合 i % ( i - next[i] ) == 0 &&...原创 2018-12-05 20:47:10 · 277 阅读 · 0 评论 -
HDU-3336-Count the string(KMP-Next数组性质)
博主链接题目链接题意:求一个串中所有前缀子串出现次数之和题解:对于每个串他前缀串出现次数和一定大于或等于n,因为有n个前缀;所以此时只需要去计算一下每一个前缀在后面出现了几次,也就是next数组的值。结合next数组的性质可以很容易得知,next数组中存在一个非0位,就出现了一种前缀,ans就++。所以只需对字符串求一遍next数组,统计都是个非零元素就可以了。代码:#includ...原创 2018-12-05 20:45:37 · 232 阅读 · 0 评论 -
POJ-2406-Power Strings(循环节)
博主链接题目链接题意:给我们一个字符串,我们要求出它最多由几个相同的连续子串连接而成。也就是求最小循环节题解:先注意到如果他是循环子串那么n-next[n]一定是最小循环节。于是可以先求出nxt然后暴力匹配一遍看看。但是事实上只要满足n%(n-next[n])==0就可以保证答案正确了。代码:#include<stdio.h>#include<cstring&g...原创 2018-12-05 20:43:51 · 217 阅读 · 0 评论 -
HDU - 4763 -Theme Section(迭代求公共前后缀跑KMP)
博主链接题目链接题意:给一个字符串,求出字符串的最大的相同前缀后缀,并且满足前缀后缀在字符串中间出现了。题解:可以先对字符串跑KMP求一下Next数组,由next数组定义可以知道,里面存的是当前字符最长前缀和后缀,所以我们只需要从最后一个字符出发,递归寻找每个长度为的Next值的前缀后缀,对于长度为len的前缀,只需要用该前缀起和字符串的除了前缀和后缀的部分匹配就可以了,如果匹配成功...原创 2018-12-04 21:08:48 · 230 阅读 · 0 评论 -
HDU - 3374 - String Problem(最大与最小表示法+kmp求循环节)
HDU - 3374 - String Problem个人博客题意:给你一个字符串,问这个字符串经过移动后的字典序最小的字符串的首字符位置和字典序最大的字符串的首字符的位置,和能出现多少次最小字典序的字符串和最大字典序的字符串题解:利用最小表示法与最大表示法O(n)复杂度求出最小字典序和最大字典序串出现位置,然后利用kmp求出next,利用next数组性质求出循环节次数,因为最小和最大...原创 2018-11-17 17:01:47 · 597 阅读 · 0 评论 -
HDU-1686- Oulipo KMP匹配
POJ-3461 Oulipo PJ的女朋友是一个书法家,喜欢写一些好看的英文书法。有一天PJ拿到了她写的纸条,暗示要送给他生日礼物。PJ想知道自己想要的礼物是不是就是她送的,于是想看看自己想要的在纸条中出现了多少次。 Input 第一行输入一个整数代表数据的组数 每组数据第一行一个字符串 W代表PJ想要的礼物, 包含英语字符 {‘A’, ‘B’, ‘C’, …, ...原创 2018-08-02 21:11:21 · 331 阅读 · 0 评论 -
HDU-1358-Period(KMP求前缀循环节)
题目题目链接解题思路题解:先求出元素的最大公因子,开一个数组num记录每个数出现次数,再利用素数筛,求出所有数有当前质数因子的的个数代码#include&amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;gt;#include&amp;amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;amp;gt;#define met(a) memset(a,原创 2018-09-22 00:37:04 · 1457 阅读 · 0 评论 -
Blue Jeans---poj3080(kmp+暴力求子串)
题目题意:给一个n,输入n个长度为60的字符串,求最长公共子串(2&amp;amp;lt;n&amp;amp;lt;=10),如果公共串长度大于等于3就输出这个子串(开始真的是瞎了,看了题直接将所有字符串连接来,求了波next数组,然后完美求出了子串长度,却发现要求是输出子串,心里***)**思路:(KMP+暴力求子串)枚举第一个字符串的不同长度子串,判断她是否为下面多有的公共子串?如果是的话,那么我们就表明找到,...原创 2018-09-26 22:16:30 · 887 阅读 · 0 评论 -
POJ2752-Seek the Name, Seek the Fame(找相同的前后缀)
题目博主博客题意:求一个串中相同前后缀长度,并输出思路:利用KMP的next数组性质;如果s[next[n-1]]=s[n],则此时前后缀相同,然后再开始回滚,若s[next[n-1]] == s[n-1],则子串s[0,1,2,…,next[n-1]]是满足条件的子串。然后判断s[next[next[n-1]]] == s[n-1]是否成立,这样一直回滚,直到next[next[…n...原创 2018-09-28 19:00:51 · 785 阅读 · 0 评论 -
HDU-2594-Simpsons’ Hidden Talents(KMP的next数组应用)
博主链接题目题意:给你两个串,求第一个串的前缀和第二个串的后缀的相同长度题解:( 这题和POJ2752基本一样,都是利用next性质求公共前后缀 )。利用strcat(s,s1)将两个串接起来,利用KMP的next数组性质如果s[next[n-1]]=s[n],则此时前后缀相同,然后再开始回滚,若s[next[n-1]] == s[n-1],则子串s[0,1,2,…,next[n-1]...原创 2018-09-28 22:59:41 · 753 阅读 · 0 评论 -
HDU - 2609 - How many (最小表示法+set除重)
博主CSDN题目链接题意:有n个环形字符串,一个环形字符串移动会形成不能的字符串,我们把它们看作同一串字符串,求有多少个不同的字符串题解:用最小表示法把每个串的最小字典序找出来, (如果两个循环串相等则他们的最小字典序也一定相等),set带有除重功能,因为set具有除重功能所以用set来存每个串求出的最小字典序代码:#include&lt;stdio.h&gt;#include&...原创 2018-12-03 21:39:06 · 298 阅读 · 0 评论