Pagini recente » Cod sursa (job #1275245) | Cod sursa (job #1465174) | Cod sursa (job #767708) | Cod sursa (job #909948) | Cod sursa (job #1412246)
#include<cstdio>
char si[17000];
const int md=1000003;
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++)
if(si[i]>='a' && si[i]<='z')
si[i]=si[i]-'a'+1;
else
if(si[i]>='A' && si[i]<='Z')
{
si[i]=si[i]-'A'+30;
}
else
si[i]=si[i]-'0'+60;
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*70)%md;
tm=0;
for(i=1;i<=mi;i++)
tm=(tm*70+si[i])%md;
fr[tm]++;
for(i=mi+1;i<=n;i++)
{
tm=(tm-(pu*si[i-mi])%md)%md;
if(tm<0)
tm=tm+md;
tm=(tm*70+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;
}