天天看点

hdu 3553 Just a String (后缀数组)

hdu 3553 Just a String (后缀数组)

题意:很简单,问一个字符串的第k大的子串是谁。

解题思路:后缀数组。先预处理一遍,把能算的都算出来。将后缀按sa排序,假如我们知道答案在那个区间范围内了(假设为[l,r]),那么我们算下这个区间内的lcp的最小值(设最小值的位置为mid,大小为x),如果x*(r-l+1)>=k,那么,答案就是这个区间的lcp的最小值的某一部分(具体是哪一部分,画个图稍微算下就出来了)。如果x * ( r - l + 1 ) < k 那么我们分两种情况考虑,如果[l,mid]区间范围内的字符串总数大于等于k,那么把区间范围缩小到[l,mid],否则范围缩小到[mid+1,r]。一点点的逼近答案就可以了。