Pagini recente » Cod sursa (job #758118) | Cod sursa (job #2875393) | Cod sursa (job #1747364) | Cod sursa (job #2931598) | Cod sursa (job #1522394)
#include<stdio.h>
#include<algorithm>
using namespace std;
struct bine { int nr1; };
bine v[16385];
int n1=100007,n2=100021,b=123;
bool sortare ( bine a , bine b ){
return a.nr1<b.nr1;
}
int gasire ( bine v[] , int n ){
int l,lmax,i;
l=1;
lmax=0;
for(i=1;i<n;i++)
if(v[i].nr1==v[i+1].nr1)
l++;
else{
if(l>lmax)
lmax=l;
l=1;
}
if(l>lmax)
lmax=l;
return lmax;
}
char s[16386];
int main(){
int n,j,st,dr,k,m,nnr1,nnr2,p1,p2,i,r,q,l;
freopen("substr.in","r",stdin);
freopen("substr.out","w",stdout);
scanf("%d%d",&n,&q);
scanf("%s",&s);
st=1;
dr=n;
while(st<=dr){
k=0;
m=(st+dr)/2;
nnr1=nnr2=0;
p1=p2=1;
for(i=0;i<m;i++){
nnr1=((nnr1*b)%n1+s[i])%n1;
//nnr2=((nnr2*b)%n2+s[i])%n2;
if(i!=0){
p1=(p1*b)%n1;
//p2=(p2*b)%n2;
}
}
k++;
v[k].nr1=nnr1;
//v[k].nr2=nnr2;
for(i=0,j=m;j<n;i++,j++){
nnr1=((((nnr1-(s[i]*p1)+n1)%n1)*b)%n1+s[j])%n1;
//nnr2=((((nnr2-(s[i]*p2))%b)%n2+n2)%n2+s[j])%n2;
k++;
v[k].nr1=nnr1;
//v[k].nr2=nnr2;
}
sort(v+1,v+k+1,sortare);
r=0;
r=gasire(v,k);
if(r<q)
dr=m-1;
else{
st=m+1;
l=m;
}
}
printf("%d\n",l);
return 0;
}