题目大意:和spoj687类似,就是当长度相同是需要输出一个最小的字典序的序列。
解体思路:这次需要枚举所有的从i到d = i-L/i (d = i-L%i)的位置,然后记录保证最大值的同时,求出来字典序最小的。
Maximum repetition substring
Time Limit: 1000MS
Memory Limit: 65536K
...
分类:
编程语言 时间:
2015-01-26 17:03:45
阅读次数:
175
这也是一道例题给定一个字符串,求至少出现 k 次的最长重复子串,这 k 个子串可以重叠。算法分析:这题的做法和上一题差不多,也是先二分答案,然后将后缀分成若干组。不同的是,这里要判断的是有没有一个组的后缀个数不小于 k。如果有,那么存在k 个相同的子串满足条件,否则不存在。这个做法的时间复杂度为 O...
分类:
编程语言 时间:
2015-01-26 11:37:26
阅读次数:
238
倒计时从三位数变成了两位数。然后这周还是很不知道怎么说,经常写一道题写两天。但是总算把后缀数组写完了,也整理完了。然后周末都不知道干了什么周末就过去了。无聊看了两道省选题发现都是不会做系列,看了以前挖的坑还是不会做系列。然后一节晚自修不知道怎么的也要过去了。刚开始觉得有点信心了,不想太消极。这周放松...
分类:
其他好文 时间:
2015-01-25 22:15:41
阅读次数:
160
后缀数组的用处:快速求出两个后缀Suffix(i), Suffix(j)的最长公共前缀(LCP, Longest Common Perfix)以下一张图片可谓简洁明了。下面贴上模板1.求最长重复子串,可以重叠void solve_duplicate_substr(int n){//duplicate...
分类:
编程语言 时间:
2015-01-25 15:04:43
阅读次数:
311
后缀数组(至少重复k次的可重叠的最长重复子串)...
分类:
编程语言 时间:
2015-01-25 13:56:16
阅读次数:
210
题目大意:给你一串字符串,让你求出来它存在的最长连续的回文串。
解题思路:先把字符串逆序加到数组中,然后用后缀数组求解。两种方法:1,枚举排名,直接比较rank相同的字符串的位置差是不是len。如果是的话,就记录求解;2,枚举地址,求第i地址与第2*len-i+1的lcp的最大值。
PS:需要注意如果多解输出靠前的字符串。
两种写法写在了一起,分别是Del,和Del1函数。
1...
分类:
编程语言 时间:
2015-01-23 21:35:50
阅读次数:
378
题目大意:给你一个字符串,给你N次查询,每次给你一个区间让你求出这个区间里面有多少子串。
解题思路:我们肯定要枚举位置,然后找公共子串然后再去掉重复的,但是他的地址对应的rank不是连续的,如果暴力找的话会n*n会超时。
从这个博客学习到一种方法:首先对整个字符串求一次sa[]以及height[],之后对于任意区间[L, R],遍历一遍sa[],只要起点在[L, R]内的后缀就需要进行统计,类...
分类:
编程语言 时间:
2015-01-23 20:12:09
阅读次数:
239
题目大意:给定长度为N的字符串,求出其中不相同子串的个数。
解题思路:每一个字串一定是某个后缀的前缀,那么原问题就可以等价于求所有后缀之间的不相同的前缀的个数。如果所有的后缀按照suffix(sa[1]),suffix(sa[2])……suffix(sa[n])的顺序计算,我们会发现对于每个新加进来的后缀suffix(sa[k]),它将产生n-sa[k]+1个新的前缀。但是其中有leight[k...
分类:
编程语言 时间:
2015-01-22 20:18:15
阅读次数:
276
题目大意:给出n个数字。首先将这n个数前后做差,得到另一个长度是n-1的序列。求出这个序列的最长重复子串,且这些子串不能重叠。
PS:这题论文上有解析。
解题思路:先二分答案,把题目变成判断性问题:判断是否存在两个长度为k的字串是否相同的,且不重叠。解决这个问题的关键还是利用height数组。把排序后的后缀数组分成若干组,其中每组的后缀之间的height值都不小于k。
容易看出,有希望成...
分类:
编程语言 时间:
2015-01-22 18:08:28
阅读次数:
238