Pagini recente » Cod sursa (job #2746960) | Cod sursa (job #1524319) | Cod sursa (job #2751981) | Cod sursa (job #235331) | Cod sursa (job #1731584)
#include <bits/stdc++.h>
using namespace std;
ifstream f("substr.in");
ofstream g("substr.out");
const int NMAX = 16389;
const int Base = 97;
int n, k, Put[NMAX], cifre[NMAX], Partial[NMAX];
char s[NMAX];
inline int Decode(const int st,const int dr) {
return cifre[dr]-cifre[st-1]*Put[dr-st+1];
}
inline bool Check(int L) {
int cnt = 1, mx = 0, na = 0;
for(int i = L; i <= n ;i++) {
Partial[++na] = Decode(i-L+1,i);
}
sort(Partial,Partial + na + 1);
for(int i = 2; i <= na; i++) {
if(Partial[i] == Partial[i-1]) {
cnt++;
mx = max(mx,cnt);
}
else {
cnt = 1;
}
}
if(mx >= k)
return 1;
return 0;
}
inline void Cb() {
int st = 1, dr = n, sol = 0;
while(st <= dr) {
int m = (st + dr)/2;
if(Check(m)) {
sol = m;
st = m + 1;
}
else
dr = m - 1;
}
g<< sol << "\n";
}
int main()
{
f>> n >> k;
f>>(s+1);
Put[0] = 1;
for(int i = 1; s[i]; i++) {
Put[i]=Put[i-1]*Base;
cifre[i]=cifre[i-1]*Base+s[i];
}
Cb();
return 0;
}