Pagini recente » Cod sursa (job #2077219) | Cod sursa (job #2715065) | Cod sursa (job #1712070) | Cod sursa (job #2188830) | Cod sursa (job #1520975)
#include <cstdio>
#define MOD 666013
#define BAZA 991
#define MAXN 16384
char v[MAXN];
int vf[MOD];
inline int cauta(int l,int k,int n){
int i,p,nr;
p=1;
nr=0;
for(i=l-1;i>=0;i--){
nr=(nr+p*v[i])%MOD;
if(i>0)
p=(p*BAZA)%MOD;
}
vf[nr]++;
for(i=l;i<n;i++){
nr=(((nr-(p*v[i-l])%MOD+MOD)%MOD)*BAZA+v[i])%MOD;
vf[nr]++;
}
i=0;
while(i<MOD&&vf[i]<k)
i++;
for(int j=0;j<MOD;j++)
vf[j]=0;
if(i==MOD)
return 0;
return 1;
}
int main(){
FILE*fi,*fout;
int rez,pas,i,n,k;
char a;
fi=fopen("substr.in" ,"r");
fout=fopen("substr.out" ,"w");
fscanf(fi,"%d%d" ,&n,&k);
a=fgetc(fi);
for(i=0;i<n;i++)
v[i]=fgetc(fi);
rez=0;
for(pas=1<<15;pas;pas>>=1)
if(rez+pas<=n&&cauta(rez+pas,k,n)==1)
rez+=pas;
fprintf(fout,"%d" ,rez);
fclose(fi);
fclose(fout);
return 0;
}