Pagini recente » Cod sursa (job #1343234) | Cod sursa (job #1142587) | Cod sursa (job #3200872) | Cod sursa (job #1592586) | Cod sursa (job #1523349)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define N 16385
#define m 100007
#define b 123
using namespace std;
char s[N];
int v[N];
int main()
{
freopen("substr.in","r",stdin);
freopen("substr.out","w",stdout);
int n, k, st, dr, mij, nr, p=1, cont=0, i, j, t=0, tmax=0, total=0;
scanf("%d%d",&n, &k);
scanf("%s",s);
st=1;
dr=n;
while(st<=dr)
{
nr=0;
cont=0;
t=1;
tmax=-1;
mij=(st+dr)/2;
p=1;
for(i=0; i<mij; i++)
{
nr=(nr*b+s[i])%m;
if(i>=1)
p=(p*b)%m;
}
v[cont]=nr;
cont++;
for(i=0, j=mij; j<n; i++, j++)
{
nr=(((nr-(s[i]*p)%m+m)%m)*b+s[j])%m;
v[cont]=nr;
cont++;
}
sort(v, v+cont);
for(i=1; i<cont; i++)
if(v[i-1]!=v[i])
{
if(tmax<t)
{
tmax=t;
t=1;
}
}
else
t++;
if(tmax>=k)
{
total=mij;
st=mij+1;
}
else
dr=mij-1;
}
printf("%d",total);
return 0;
}