Pagini recente » Cod sursa (job #2204527) | Cod sursa (job #697161) | Cod sursa (job #6842) | Cod sursa (job #2962802) | Cod sursa (job #612865)
Cod sursa(job #612865)
#include <cstdio>
#include <cstring>
char ch[16386];
int h[300007],n,k;
int fct(int x)
{
int sol=0,aux=0,aux2=0,i;
memset(h,0,sizeof(h));
for (i=1;i<x;++i)
aux2*=27;
for (i=1;i<=x;++i)
aux=(aux*27+ch[i]-'a'+1)%300007;
h[aux]=1;
for (i=2;i<=n-k+1;++i)
{
aux=(aux-aux2*(ch[i-1]-'a'+1))%300007;
if (aux<0)
aux+=300007;
aux=(aux*27+ch[i-1]-'a'+1)%300007;
++h[aux];
}
for (i=0;i<300007;++i)
if (sol<h[i])
h[i]=sol;
return sol;
}
int main()
{
int step,i;
freopen("substr.in","r",stdin);
freopen("substr.out","w",stdout);
scanf("%d %d\n",&n,&k);
fgets(ch,sizeof(ch),stdin);
for (step=1;step<n-k+1;step<<=1);
for (i=0;step;step>>=1)
if (i+step<=n-k+1&&fct(i+step))
i+=step;
printf("%d\n",i);
return 0;
}