Pagini recente » Cod sursa (job #2476549) | Cod sursa (job #2533746) | Cod sursa (job #4740) | Cod sursa (job #1634045) | Cod sursa (job #614096)
Cod sursa(job #614096)
#include <cstdio>
#include <cstring>
char ch[16387];
int h[300023],n,k;
inline int code(char x){if (x>='0'&&x<='1') return x-'0'+1;else if (x>='a'&&x<='z') return x-'a'+11;else return x-'A'+37;}
int hash(int x)
{
int aux=0,aux2=1,i;
memset(h,0,sizeof(h));
for (i=1;i<x;++i)
aux2=(aux2*67)%300023;
for (i=1;i<=x;++i)
aux=(aux*67+code(ch[i]))%300023;
h[aux]=1;
for (i=2;i<=n-x+1;++i)
{
aux=(aux-aux2*code(ch[i-1]))%300023;
if (aux<0)
aux+=300023;
aux=(aux*67+code(ch[i+x-1]))%300023;
++h[aux];
}
for (i=0;i<300023;++i)
if (k<=h[i])
return 1;
return 0;
}
int main()
{
int step,i;
freopen("substr.in","r",stdin);
freopen("substr.out","w",stdout);
scanf("%d %d\n",&n,&k);
fgets(ch+1,sizeof(ch)-1,stdin);
for (step=1;step<n;step<<=1);
for (i=0;step;step>>=1)
if (i+step<=n&&hash(i+step))
i+=step;
printf("%d\n",i);
return 0;
}