后缀数组
lj_acm
这个作者很懒,什么都没留下…
展开
-
poj 2774
用的是后缀数组,对于串s1,s2求最长公共子串,最原始的想法就是比较两个串的所有后缀之间的最长公共前缀,可有通过后缀数组优化,先把s1,s2连起来,中间加一个不在s1,s2中的任意一个字符。这样,新形成的串的后缀可以分为两类,一类是包含s1中字符的后缀,一类就是不包含s1中字符的后缀,最后的结果也就是这两类后缀之间的最长公共前缀。额外添加的那个字符的作用就体现于此,这两类后缀的最长公共前缀,也就是原创 2013-04-24 19:15:40 · 930 阅读 · 0 评论 -
poj 1743
若序列ai,ai+1,ai+2,ai+k-1,和aj,aj+1,aj+2,..aj+k-1,满足要求,那ai+1-ai==aj+1-aj,以此类推。所以对原序列进行处理,得到有n-1个元素的序列b,bi代表ai+1-ai的值,那么原问题就转化为了不可重叠最长重复子串。二分结果值k,看是否存在两个长度为k的子串相同,并且不重叠。也就是看是否存在一对后缀,这两个后缀的LCP大于等于k,并且编号差值>=原创 2013-08-06 17:34:40 · 717 阅读 · 0 评论 -
poj 3261
后缀数组,还是对height数据进行分组。然后二分答案。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxn=20000+10; 7 int num[maxn]; 8 i原创 2013-08-06 17:34:42 · 682 阅读 · 0 评论