随笔分类 - 后缀数组
摘要:题目:[JSOI2007]字符加密 很常见的做法,破环为链,然后以2n为总长再后缀排序,然后对于SA[i] < n 的,说明第i小后缀的编号是小于n的,也就是说,以i开头的编号是合法的,那么输出s[SA[i]+n-1]即可。 代码: #include <cstdio> #include <cstdl
阅读全文
摘要:题目:不同子串个数 这题需要利用后缀数组求出的height的性质,我们发现对于每个后缀,他的height后的所有子串就是算在答案里,因此答案只需要求出n-height[i]-sa[i]+1的和就可以了。 代码: #include <cstdio> #include <cstdlib> #includ
阅读全文
摘要:题目:后缀排序 什么是后缀数组?他主要包含两个数组:sa和rk。 其中sa[i]表示将字符串后缀排序后第i小的编号,rk[i]表示后缀i的排名。 显然sa[rk[i]]=i,rk[sa[i]]=i。 例如字符串aba,他的后缀aba,ba,a,排序后a,aab,ab,此时 | i | 1 | 2 |
阅读全文