码迷,mamicode.com
首页 >  
搜索关键字:后缀数组    ( 1340个结果
【后缀数组】不相同的字串个数
spoj改版后好囧……不相同的子串的个数(spoj694,spoj705)给定一个字符串,求不相同的子串的个数。算法分析:每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数。如果所有的后缀按照 suffix(sa[1]), suffix(sa[2]),suffix(sa...
分类:编程语言   时间:2015-04-28 08:16:54    阅读次数:160
后缀数组题目整理
最近在跟着罗穗骞 的论文学习后缀数组, 不亏是神牛的论文。无论是算法讲解,还是习题举例都非常不错。下面把最进做的几道后缀数组整理一下。1.两字符串的最长公共子串 1 #include 2 #include 3 #include 4 #include 5 #include 6 #includ...
分类:编程语言   时间:2015-04-28 01:51:30    阅读次数:238
【后缀数组】【二分答案】【差分】poj1743 Musical Theme
差分消除加减一个值得影响,貌似r二分上界要设成(n-2)/2?为啥?sa求不可重叠最长重复子串给定一个字符串,求最长重复子串,这两个子串不能重叠。算法分析:这题比上一题稍复杂一点。先二分答案,把题目变成判定性问题:判断是否存在两个长度为 k 的子串是相同的,且不重叠。解决这个问题的关键还是利用hei...
分类:编程语言   时间:2015-04-27 23:10:08    阅读次数:170
后缀数组小结
搞了这么多后缀数组,写个总结 其实罗穗赛的论文里已经都总结得很清楚了。我这里对一些代码的具体实现细节和一些要注意的地方做一些说明。 后缀数组很重要的三个数组就是:rank[],sa[]和height[]了 其中rank[i]表示i这个后缀的排名,sa[i]表示排在第i位的后缀的首字母位置,height[i]表示排名第i的后缀和排名i-1的后缀的lcp(最长公共前缀) 其中最重要的就是hei...
分类:编程语言   时间:2015-04-27 13:19:02    阅读次数:157
【后缀数组】poj3581 Sequence
考虑第一次切割,必然切割的是翻转后字典序最小的前缀,伪证:若切割位置更靠前:则会导致第一个数翻转后更靠前,字典序必然更大。若切割位置更靠后,则显然也会导致字典序更大。↑,sa即可对于第二次切割,有结论:将序列分割成两段再分别翻转得到的序列,可以看作是将两个原序列拼接得到的新序列中的某个字串翻转得到的...
分类:编程语言   时间:2015-04-27 13:05:19    阅读次数:143
UVALive 6869(后缀数组)
传送门:Repeated Substrings题意:给定一个字符串,求至少重复一次的不同子串个数。分析:模拟写出子符串后缀并排好序可以发现,每次出现新的重复子串个数都是由现在的height值减去前一个height值。#include #include #include #include #inclu...
分类:编程语言   时间:2015-04-27 12:58:48    阅读次数:174
【后缀数组】uoj#35. 后缀排序
模板#include#include#includeusing namespace std;#define N 100001int sa[N],t[N],t2[N],tong[N],n;char s[N];inline bool cmp(int *y,int i,int k){ return (y[...
分类:编程语言   时间:2015-04-26 18:03:05    阅读次数:126
hdu1403 后缀数组入门题
//1403思路:字符串的任何一个子串都是这个字符串的某个后缀的前缀,则求A和B的最长公共子串等价于求A的后缀和B的后缀的最长公共前缀的最大值。做法:将第二个字符串写在第一个字符串后面,中间用一个没有出现过的字符隔开,再求这个新的字符串的后缀数组。 1 #include "bits/stdc++.h...
分类:编程语言   时间:2015-04-25 00:06:30    阅读次数:168
POJ 2774 (后缀数组 最长公共字串) Long Long Message
用一个特殊字符将两个字符串连接起来,然后找最大的height,而且要求这两个相邻的后缀的第一个字符不能在同一个字符串中。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = 200000 +...
分类:编程语言   时间:2015-04-23 23:14:49    阅读次数:151
POJ 3693 (后缀数组) Maximum repetition substring
找重复次数最多的字串,如果有多解,要求字典序最小。我也是跟着罗穗骞菊苣的论文才刷这道题的。首先还是枚举一个循环节的长度L,如果它出现两次的话,一定会包含s[0], s[L], s[2L]这些相邻两个之间。然后枚举相邻的两个,尽可能的向前和向后延伸,假设延伸长度为k,则重复次数为k / L + 1向后...
分类:编程语言   时间:2015-04-23 22:55:03    阅读次数:184
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!