扩展KMP
文章平均质量分 73
hcx11333
菜鸡一枚,成长ing。。。
展开
-
HDU1686 Oulipo(扩展KMP)
题意:给出两个串w和t,求w在t中出现的次数,不同次数可以覆盖。 思路:可以做一次扩展KMP,求出以t的每一位作起点与w的匹配长度,然后扫一遍结果,达到w的长度就加一。 #include #include #include #include #include #include #include #include using namespace std; typedef long原创 2017-08-19 01:53:01 · 339 阅读 · 0 评论 -
HDU6153 A Secret(扩展KMP)2017中国大学生程序设计竞赛 - 网络选拔赛-1004
题意:给两个串s1和s2,对于s2的每个后缀,Li表示后缀的长度,Ni表示这个后缀在s1里面出现过的次数。求Ni * Li 的总和。 思路:后缀匹配,反过来就是前缀匹配了嘛!反转两个字符串做一次扩展KMP,遍历extend数组,如果一个位置的匹配长度是len,那么说明所有长度小于等于len的原串后缀匹配次数都增加了一次。求和输出即可。 #include #include #in原创 2017-08-19 19:59:22 · 790 阅读 · 0 评论 -
HDU3613 Best Reward(扩展KMP)
题意:给一个由小写字母构成的字符串,每个字母否有对应的值,将串分成两个子串,如果子串是回文串的话子串的值就是每个字符的值之和;否则子串的值就是0.原串的值等于两个子串之和,求原串能取到的最大的值。 思路:求回文子串的和的最大值显然需要找出所有可能的回文子串,可以用扩展KMP。先将原串s1反转得到s2,以s1为目标串s2为模式串做一次扩展KMP得到extend1数组,此时若 extend1原创 2017-08-13 21:04:02 · 213 阅读 · 0 评论 -
HDU4333 Revolving Digits(KMP+扩展KMP)
题意:给出一个十万位以内的数字,不断将最后的数字添加到前面去,如123就可以得到312、231、123.问最终得到的有多少个数字小于原数、等于原数、大于原数。 思路:十万位的长度,显然要用字符串来存,因为需要循环移位比较,所以直接将原串在末尾复制一遍。发现可以以复制后得到的s1为目标串,原串s2为模式串,做一次扩展KMP,每次只需要比较匹配长度的后面一位即可,这样就可以接近线性复杂度求解原创 2017-08-14 16:18:56 · 251 阅读 · 0 评论 -
HDU4763 Theme Section(KMP+扩展KMP)
题意:给一个字符串S,找出一个最长的子串E,使得S可以写成‘EAEBE’的形式,其中A、B是任意字符串,可空。求E的最大长度。 思路:求前缀和后缀的最大匹配,可以用KMP算法里的next数组;求前缀和中缀的最长匹配,可以用扩展KMP,这里是跟自身匹配,所以搞一次扩展KMP里的求next数组就行了。 考虑到可能中间存在循环节导致中缀匹配的长度大于结果,从后缀匹配的结果入手,对于每个后缀匹原创 2017-08-15 20:57:44 · 286 阅读 · 0 评论 -
UVA11475 Extend to Palindrome(扩展KMP/Manacher/后缀数组)
题意:给一个长度最大100000的字母串,可在它后面任意补充字符,输出可以构成的最短回文串。 思路:补充的部分要与前面形成回文,要求出来最少的情况,显然我们要先求出原串的后缀能够形成的最大回文串,然后补充剩下的前缀部分的对称串即可。最好的情况就是原串回文,不需要补充,最坏的情况是以最后一个字母为对称中心,要补充n-1个字母。 求最大的回文后缀,有几种方法: Manacher: 在串上跑一次...原创 2018-10-19 13:27:04 · 289 阅读 · 0 评论