后缀数组
hcx11333
菜鸡一枚,成长ing。。。
展开
-
POJ3581 Sequence(后缀数组坑题)
题意:将一个长度为N(<=200000)的数组,划分成非空的三段,然后倒转每一段拼成一个新的数组(三段相对位置不变),输出字典序最小的结果。 思路:要求的就是倒转后字典序最小的结果,先倒转原数组,跑一次SA,之后后缀会按照字典序排列,我们只需要找到第一个满足sa[i]>1(因为要保证后面两段非空)的位置就行了,这就是第一段。去掉第一段后,我们需要找出剩下的部分中字典序较小的...原创 2018-10-19 11:33:58 · 170 阅读 · 0 评论 -
POJ3261 Milk Patterns(二分+后缀数组)
题意:一个长度N(1<=N<=20000)的数列,找出其中至少重复了K次的最长子串,输出长度,子串可以重叠。思路:后缀数组经典应用,二分答案ans,找到满足条件的最大的长度。对于每个二分的值x,我们按照x将height值分组,同一组内超过K个位置即可。#include <iostream>#include <cstdio>#include <...原创 2018-10-19 11:44:49 · 150 阅读 · 0 评论 -
UVA11475 Extend to Palindrome(扩展KMP/Manacher/后缀数组)
题意:给一个长度最大100000的字母串,可在它后面任意补充字符,输出可以构成的最短回文串。思路:补充的部分要与前面形成回文,要求出来最少的情况,显然我们要先求出原串的后缀能够形成的最大回文串,然后补充剩下的前缀部分的对称串即可。最好的情况就是原串回文,不需要补充,最坏的情况是以最后一个字母为对称中心,要补充n-1个字母。求最大的回文后缀,有几种方法:Manacher:在串上跑一次...原创 2018-10-19 13:27:04 · 289 阅读 · 0 评论 -
POJ1743 Musical Theme(二分+后缀数组)
题意:有一个长度N(1<=N<=20000)的数列,元素的范围是1~88。定义“theme”为一个长度不小于5的串s,且数组中还存在至少一个与它等长的串t,t中每个相邻元素之间的差值与s串相等,s和t不能相互覆盖。求最长的theme串的长度。思路:题目要求两个子串的相邻元素差值相等,而后缀数组求的是匹配的串,我们可以求出数组中相邻元素的差值构成一个新的数组,即转化成了经典的最大不覆...原创 2018-10-19 13:37:09 · 154 阅读 · 0 评论 -
POJ3693 Maximum repetition substring
题意:给一个长度100000以内的字符串,求出其中重复次数最多的可重叠子串,如果有多个结果输出字典序最小的。思路:枚举循环节长度len,对于每个len,枚举串的起点j,每次递增len,求出后缀j与后缀(j+len)的最长公共前缀L,这个只需要求出min(height[j],...,height[j+len]),这个先用一个ST表预处理出来。那么len的循环次数就是L/len+1,这时候再处理j...原创 2018-10-19 13:51:41 · 185 阅读 · 0 评论