Pagini recente » Cod sursa (job #205064) | Cod sursa (job #2003971) | Istoria paginii runda/simulare_oji_bv_11-12 | Cod sursa (job #367776) | Cod sursa (job #2605087)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("substr.in");
ofstream fout("substr.out");
const int NMAX = 20005;
const int BAZA = 27;
const int MOD = 1000000007;
int n,k;
char c[NMAX];
long long put[NMAX],h[NMAX];
unordered_map <long long,int> m;
int main()
{
fin >> n >> k;
fin >> (c+1);
put[0]=1;
for(int i=1;i<=16500;i++) put[i]=(1LL*put[i-1]*BAZA);
for(int i=n;i>=1;i--) h[i]=(h[i+1]*BAZA+c[i]);
int st=0,dr=n,mij,rasp=0;
while(st<=dr){
bool ok=false;
mij=(st+dr)/2;
for(int i=1;i<=n-mij+1;i++){
long long hh=h[i]-(h[i+mij]*put[mij]);
m[hh]++;
}
for(auto it:m){
if(it.second>=k){
ok=true;
rasp=mij;
break;
}
}
m.clear();
if(ok==true){
st=mij+1;
} else dr=mij-1;
}
fout << rasp;
return 0;
}