Pagini recente » Cod sursa (job #2759530) | Cod sursa (job #173457)
Cod sursa(job #173457)
#include <stdio.h>
#define prim 66600013
char text[17000];
int ap[prim+10];
int i,j,p,q,r,n,k,ok,sol;
unsigned int x,put;
int main()
{
freopen("substr.in","r",stdin);
freopen("substr.out","w",stdout);
scanf("%d %d ",&n,&k);
scanf("%s ",text+1);
p=0;q=n+1;
while (p+1<q)
{
r=(p+q)/2;
ok=0;
x=0;put=1;
for (i=1; i<=r; i++)
{
x=(x*27+text[i]-'a')%prim;
if (i<r) put=(put*27)%prim;
}
for (i=0; i<=prim-1; i++)
ap[i]=0;
for (i=r+1; i<=n+1; i++)
{
ap[x]++;
if (ap[x]>=k) ok=1;
x=(x-(put*(text[i-r]-'a'))%prim)%prim;
if (x<0) x+=prim;
x=(x*27+text[i]-'a')%prim;
}
if (ok)
{
p=r;
sol=p;
}
else q=r;
}
printf("%d\n",sol);
return 0;
}