Pagini recente » Cod sursa (job #1281965) | Cod sursa (job #145122) | Cod sursa (job #1918610) | Cod sursa (job #1338958) | Cod sursa (job #1459499)
#include <bits/stdc++.h>
using namespace std;
typedef int var;
ifstream fin("substr.in");
ofstream fout("substr.out");
#define MAXN 50000
#define B 9907
int64_t Part[MAXN], Pow[MAXN];
char str[MAXN];
var n, k;
int64_t getHash(var e, var l) {
return Part[e] - Pow[l] * Part[e-l];
}
unordered_map<int64_t, var> Map;
bool good(var l) {
Map.clear();
for(var i=l; i<=n; i++)
Map[getHash(i, l)]++;
for(auto p : Map)
if(p.second >= k)
return true;
return false;
}
int main() {
fin>>n>>k>>str+1;
str[0] = '#';
Pow[0] = 1;
for(var i=1; i<=n; i++) {
Part[i] = Part[i-1] * B + str[i];
Pow[i] = Pow[i-1] * B;
}
var i, sol = 0;
for(i=1; i<=n; i<<=1);
for(; i; i>>=1)
if(sol + i <= n && good(sol + i))
sol += i;
fout<<sol;
return 0;
}