Pagini recente » Cod sursa (job #3145355) | Cod sursa (job #1921751) | Cod sursa (job #2701235) | Cod sursa (job #206206) | Cod sursa (job #1412224)
#include<cstdio>
char si[17000];
const int md=666013;
int fr[md+5];
int main()
{
freopen("substr.in","r",stdin);
freopen("substr.out","w",stdout);
int n,k,i,j,mi,la,pu,tm,st,dr;
bool te;
scanf("%d%d\n",&n,&k);
gets(si+1);
for(i=1;i<=n;i++)
si[i]=si[i]-'a'+1;
st=1;
dr=n;
la=0;
while(st<=dr)
{
te=0;
mi=(st+dr)/2;
pu=1;
for(i=1;i<mi;i++)
pu=(pu*27)%md;
tm=0;
for(i=1;i<=mi;i++)
tm=(tm*27+si[i])%md;
fr[tm]++;
for(i=mi+1;i<=n;i++)
{
tm=tm-(pu*si[i-mi])%md;
if(tm<0)
tm=tm+md;
tm=(tm*27+si[i])%md;
fr[tm]++;
}
for(i=0;i<md;i++)
{
if(fr[i]>=k)
te=1;
fr[i]=0;
}
if(te)
{
la=mi;
st=mi+1;
}
else
dr=mi-1;
}
printf("%d\n",la);
return 0;
}