Pagini recente » Cod sursa (job #495218) | Cod sursa (job #548813) | Cod sursa (job #1795766) | Cod sursa (job #121349) | Cod sursa (job #173528)
Cod sursa(job #173528)
#include <stdio.h>
#include <algorithm>
using namespace std;
char text[17000];
int v[17000];
int i,j,p,q,r,n,k,ok,sol,nr;
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*29+text[i]-'a';
if (i>1) put=put*29;
}
for (i=0; i<=n; i++) v[i]=0;
text[n+1]='a';
int m=0;
for (i=r+1; i<=n+1; i++)
{
m++;
v[m]=x;
x=x-put*(text[i-r]-'a');
x=x*29+text[i]-'a';
}
sort(v+1,v+m+1);
v[m+1]=-1;
ok=0;
for (i=1; i<=m; i++)
{
if (v[i]==v[i+1]) nr++;
else nr=1;
if (nr>=k) ok=1;
}
if (ok)
{
p=r;
sol=r;
}
else q=r;
}
printf("%d\n",sol);
return 0;
}