后缀数组
文章平均质量分 75
yrleep
大学毕业不久,ios游戏自由开发者。
展开
-
poj 3261 后缀数组
二分+后缀数组 #include #include #include #include using namespace std; const int maxn=2e4+509; int *rank,height[maxn],sa[maxn]; int r[maxn]; inline bool cmp(int *r,int a,int b,int l) { return r[a]=原创 2013-08-07 00:21:14 · 914 阅读 · 0 评论 -
poj 3415
单调队列+后缀数组 #include #include #include using namespace std; const int maxn=2e5+19; int r[maxn]; int *rank,height[maxn],sa[maxn]; int wx[maxn],wy[maxn],cnt[maxn]; char a[maxn],b[maxn]; struct { l原创 2013-08-07 20:35:52 · 769 阅读 · 0 评论 -
poj 3294 Life Forms
后缀数组的题目,把后缀连接起来,这个还是先二分答案,然后选取一段连续的height值,判断这些height代表的后缀有没有覆盖一半以上的字符串。 得出答案的长度之后还要在枚举连续的heigh,判断有没有答案,有的话标记其中一个。 最后再按照sa输出答案。这样就可以保证字典序。 #include #include #include using namespace std; const i原创 2013-08-11 20:10:07 · 724 阅读 · 0 评论 -
poj 1226
跟3294比较类似,但是不需要输出具体的串,比较简单,只要把串反转连接上去解法就一样了。 #include #include #include using namespace std; const int maxn=1e5+9; int r[maxn]; int c[maxn]; char a[1111]; int n,m; int *rank,height[maxn],sa[maxn];原创 2013-08-11 20:35:41 · 691 阅读 · 0 评论 -
hdu 4436 str2int 后缀数组
递推的办法不难想到,但是要去重,那就要后缀数组来找最长前缀了。后面递推的没想好,写搓了。 #include #include #include #include #include using namespace std; const int maxn=1e5+1e5+9,mod=2012; char a[maxn]; int r[maxn]; int next[maxn]; lon原创 2013-11-13 00:49:51 · 1081 阅读 · 0 评论