后缀数组
No__stop
这个作者很懒,什么都没留下…
展开
-
hdu 4622 Reincarnation(后缀数组)
hdu 4622 Reincarnation 题意:还是比较容易理解,给出一个字符串,最长2000,q个询问,每次询问[l,r]区间内有多少个不同的字串。 (为了与论文解释统一,这里解题思路里sa数组的值是从1到n,但其实代码中我的sa数组的值是从0到n)。 解题思路:09年的后缀数组论文里有一个类似的题,求一个字串的不同字串有多少个。问不同的字串有多少个,即问对于每一个后缀,它的所有前缀中原创 2013-07-31 16:30:33 · 2448 阅读 · 4 评论 -
poj 3294 Life Forms (后缀数组)
poj 3294 Life Forms 题意:给出n个字符串,问这n个字符串中,一半以上字符串拥有的最长连续公共子串有多少,按字典序全部输出来。 解题思路:一般这种最长连续公共子串什么的都是后缀数组,二分答案。。先将n个字符连起来,预处理一遍,sa,rank,height都算出来(这些我都放在模板里),然后就是二分答案了。在判断某个长度是否符合要求时,根据height值,将按height值排序原创 2013-08-14 16:17:01 · 1006 阅读 · 0 评论 -
ural 1297 Palindrome求最长连续回文子串(后缀数组求法)
ural 1297 Palindrome 题意:很简单,求最长连续回文子串。 解法:这题数据范围非常小,长度只有2000,用dp,n^2可以做,但如果长度变成100000了呢?后缀数组就可以发挥威力了。将原串翻转后接到原串后面,构成一个新的串,枚举前n个字符,设该字符为i,以它为中点的最长回文子串的长度就是。。自己去算算吧,很简单的,注意考虑奇偶。 #include #include #in原创 2013-08-14 19:54:44 · 1053 阅读 · 0 评论 -
poj 3693 Maximum repetition substring (后缀数组)
其实是论文题。。 题意:求一个字符串中,能由单位串repeat得到的子串中,单位串重复次数最多的子串。若有多个重复次数相同的,输出字典序最小的那个。 解题思路:其实跟论文差不多,我看了很久没看懂,后来总算理解了一些。假设我们的单位串长度为l,那么我们将串划分为s[0] , s[l] , s[2*l] , s[3*l]。。这样,可以根据l划分为n/l段。枚举一个j,表示当前枚举的位置为s[j*l原创 2013-08-17 14:39:06 · 971 阅读 · 0 评论 -
hdu 3553 Just a String (后缀数组)
hdu 3553 Just a String (后缀数组) 题意:很简单,问一个字符串的第k大的子串是谁。 解题思路:后缀数组。先预处理一遍,把能算的都算出来。将后缀按sa排序,假如我们知道答案在那个区间范围内了(假设为[l,r]),那么我们算下这个区间内的lcp的最小值(设最小值的位置为mid,大小为x),如果x*(r-l+1)>=k,那么,答案就是这个区间的lcp的最小值的某一部分(具体是原创 2013-10-06 17:03:00 · 1749 阅读 · 0 评论 -
hdu 4691 Front compression (后缀数组)
hdu 4691 Front compression 题意:很简单的,就是给一个字符串,然后给出n个区间,输出两个ans,一个是所有区间的长度和,另一个是区间i跟区间i-1的最长公共前缀的长度的数值的长度,加上不是公共部分的字符个数,加2,累加起来。 解题思路:后缀数组裸题。。用rmq求最长公共前缀,询问就是o(1)的。有队伍用暴力的方法过的,对于i区间与i-1区间,如果左端点一样,就去长原创 2013-08-20 19:37:48 · 1875 阅读 · 1 评论