Pagini recente » Cod sursa (job #277806) | Cod sursa (job #3268325) | Cod sursa (job #2370759) | Cod sursa (job #705406) | Cod sursa (job #1048118)
#include<fstream>
#define mod 666013
#include<map>
using namespace std;
ifstream f("substr.in");
ofstream g("substr.out");
int n,k,st,dr,mid,ans,i;
map <int,int> hash;
map<int,int>::iterator it;
char a[17000];
int check( int L ) {
hash.clear();
int Val=0;
int baza=33;
int mult=1;
int dif;
for(i=0;i<L;++i) {
Val=(Val*baza+a[i])%mod;
mult=(mult*baza)%mod;
}
hash[Val]=1;
if(k==1)
return 1;
for(i=L;i<n;++i) {
Val=(Val*baza+a[i])%mod;
dif=(a[i-L]*mult)%mod;
Val=Val-dif;
if(Val<0)
Val+=mod;
it=hash.find(Val);
if(it==hash.end())
hash[Val]=1;
else {
it->second++;
if(it->second>=k)
return 1;
}
}
return 0;
}
int main () {
f>>n>>k;
f>>a;
st=0;dr=n;
while(st<=dr) {
mid=(st+dr)/2;
if(check(mid)){
ans=mid;
st=mid+1;
}
else
dr=mid-1;
}
g<<ans<<"\n";
return 0;
}