poj 3261 Milk Patterns
题意:
给定一个字符串S,求至少出现k次的最长重复子串,这k个子串可以重叠。
限制:
1 <= |S| <= 20000
思路:
二分答案长度用lcp判断
题意:
给定一个字符串S,求至少出现k次的最长重复子串,这k个子串可以重叠。
限制:
1 <= |S| <= 20000
思路:
二分答案长度用lcp判断
/*poj 3261 Milk Patterns
题意:
给定一个字符串S,求至少出现k次的最长重复子串,这k个子串可以重叠。
限制:
1 <= |S| <= 20000
思路:
二分答案长度用lcp判断
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 20005;
const int INF = 20001;
int n; //构造后缀数组的字符串的长度
int times; //倍数
int sa[N]; //"排在第几的是谁"
int rank[N], tmp_rank[N]; //"你排第几"
bool cmp_sa(int i, int j) {
if (rank[i] != rank[j])
return rank[i] < rank[j];
else {
int ri = i + times <= n ? rank[i + times] : -1;
int rj = j + times <= n ? rank[j + times] : -1;
return ri < rj;
}
}
void build_sa