题解:
知识点:
后缀数组,二分,LCP,离散化
分析:
按照罗穗骞的论文(《后缀数组—-处理字符串的有力工具》,IOI2009中国国家集训队论文集)中的说法,这种题型叫做:
可重叠的k 次最长重复子串
解决的方法是:先求出sa、height,然后二分长度$mid$,把一个求最大值问题转化成判定性问题。判定中,我们把height值大于等于$mid$的分组(即假如中间有一个height值小于mid,那么这个位置被分作下一组,然后再继续统计答案),假如一个组中的后缀个数大于等于$k$的话,这种情况就是成立的,然后继续缩小范围查找。
注意这道题的字符集大小太大了(虽然说数据太水了,不离散化也可以过),我们要先进行离散化,给字符重新定义一个值,然后再进行操作。
整个过程总的时间复杂度是:$O(n\log_{2}n)$
代码:
1 |
|