题意 :求最长不相交重复子串的长度。。可以先求出LCP,,对于长度 二分出答案。。(竟然不会写二分) 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #incl...
分类:
编程语言 时间:
2015-03-16 22:42:59
阅读次数:
219
回溯法:避免无用判断,强化回溯代码的实现过程题目的大意就是以字典序为准,排列字符串,但要保证一个字符串中不包含相邻的重复子串。Problem DescriptionFor example, the sequence ABACBCBAD is easy, since it contains an ad...
分类:
其他好文 时间:
2015-02-21 18:47:37
阅读次数:
201
题意:给出n,l;要求按特定格式输出由前l个大写字母构成的按字母表排列的第n个没有连续重复子串的字符串以及该字符串长度。1、避免相邻的重复子串:生成字符串方式为逐个在后面添加字符,只要每次在添加字符后检查与新添加的字符相关的字符串时候满足条件即可。2、要求按字母表顺序生成子串:从A开始,逐个向后生成...
分类:
其他好文 时间:
2015-02-14 21:23:19
阅读次数:
311
解题思路:
利用next 数组的性质求解重复子串。循环节的长度为i - next[i];
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 1000000 + 10;
char s[maxn];
int n;
int next[...
分类:
其他好文 时间:
2015-02-01 19:12:28
阅读次数:
186
题目大意:给你两个字符串,让你求出来两个字符串之间的重复子串长度大于k的有多少个。
解题思路:
先说论文上给的解释:基本思路是计算A的所有后缀和B的所有后缀之间的最长公共前缀的长度,把最长公共前缀长度不小于k的部分全部加起来。先将两个字符串连起来,中间用一个没有出现过的字符隔开。按height值分组后,接下来的工作便是快速的统计每组中后缀之间的最长公共前缀之和。扫描一遍,每遇到一个B的后缀就统...
分类:
编程语言 时间:
2015-01-27 11:09:02
阅读次数:
149
题目大意:给你一个串让你求出重复次数最多的连续重复子串的重复次数。
解题思路:论文上给出的解答是:
这还没完,因为经过这两个点的情况还不完备,应还可以假设起点在 [ i*j-i+1, i*j-d],其中 d = i-L/i (d = i-L%i)其意义为根据已知的匹配长度,可以将起点往前移动的范围,太靠后将不能够构造出比之前更好的解。如果要求出某个最多的连续重复子串的最小字典序子需要枚...
分类:
编程语言 时间:
2015-01-26 17:10:25
阅读次数:
296
题目大意:和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
后缀数组的用处:快速求出两个后缀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