Pagini recente » Cod sursa (job #855811) | Cod sursa (job #3286097) | Cod sursa (job #1855730) | Cod sursa (job #149539) | Cod sursa (job #1522913)
#include<cstdio>
#define mod 100007
char v[16385];
int vec[100010];
int main ()
{freopen ("substr.in","r",stdin);
freopen ("substr.out","w",stdout);
int n,k,i,c1,c2,x,max,nr,put;
max=0;
scanf("%d%d",&n,&k);
scanf("%s",&v);
if(k==1)
{printf("%d",n);
return 0;
}
c1=1;
c2=n/k;
while(c1<=c2)
{x=(c1+c2)/2;
for(i=0;i<=100007;i++)
vec[i]=0;
nr=0;
for(i=0;i<x;i++)
nr=(nr*123+v[i])%mod;
vec[nr]=1;
put=1;
for(i=1;i<x;i++)
put=(put*123)%mod;
for(i=x;i<n;i++)
{nr=(((nr-v[i-x]*put+123*mod)%mod)*123+v[i])%mod;
vec[nr]++;
if(vec[nr]==k)
{i=n;
max=x;
c1=x+1;
}
}
if(i==n)
c2=x-1;
}
printf("%d",max);
return 0;
}