摘要:
题意:找到一个字符串内长度不小于五的可不重叠的最长重复子串,子串的所有数字同时加上或减去一同一个数这时两个字串重复也算重复出现。分析:首先最所有数字作差,s[i]=s[i+1]-s[i],这样一来及时原先的字串是进行过加或减那他们的差值也会相同,所以转换为求现有s[]中大与5的最长重复字串,用后缀数组。首先由二分答案的方法将问题变成判定性的:长度大于k的重复字串有没有?然后将height数组分组,每组内的后缀之间的height都要大于k,如果每组内的后缀之间的最长公共前缀有大于k的而且这两个后缀的sa[]之差大于k就说明存在长度至少为k的不重复子串。求最长公共前缀就要用到height数组,因为 阅读全文
摘要:
引用自HH大牛的模板http://www.notonlysuccess.com/index.php/sa/// File Name: suffix.cpp// Author: Zlbing// Created Time: 2013年09月04日 星期三 19时57分46秒#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define CL(x,v); memset(x,v,sizeof(x));#define I 阅读全文