Pagini recente » Cod sursa (job #1290805) | Cod sursa (job #741594) | Cod sursa (job #3230715) | Cod sursa (job #1470719) | Cod sursa (job #1047617)
#include <stdio.h>
#define baza 131
#define mod 666013
using namespace std;
FILE*f=fopen("substr.in","r");
FILE*g=fopen("substr.out","w");
int n,k,viz[20001];;
char v[20001];
int h[mod+3];
int main()
{
fscanf(f,"%d%d\n",&n,&k);
fgets(v+1,n+3,f);
int p=0;
int u=n;
while(p<=u)
{
int ok=0;
int m=(p+u)/2;
int b=1;
int nr=0;
for(int i=1;i<=m;++i)
{
nr+=v[i]*b;
nr%=mod;
b*=baza;
b%=mod;
}
b/=baza;
h[nr%mod]++;
int nr1=0;
viz[++nr1]=nr%mod;
if(k==1)
ok=1;
for(int i=m+1;!ok&&i<=n;++i)
{
nr/=baza;
nr+=v[i]*b;
nr%=mod;
h[nr]++;
viz[++nr1]=nr;
if(h[nr]>=k)
{
ok=1;
break;
}
}
if(ok)
p=m+1;
else
u=m-1;
for(int i=1;i<=nr1;++i)
h[viz[i]]=0;
}
fprintf(g,"%d",u);
fclose(f);
fclose(g);
return 0;
}