Pagini recente » Cod sursa (job #2229142) | Cod sursa (job #2604233) | Cod sursa (job #673401) | Cod sursa (job #277282) | Cod sursa (job #3260128)
#include <bits/stdc++.h>
#define int unsigned int
#define DIM 17000
#define BASE 666013
using namespace std;
ifstream fin("substr.in");
ofstream fout("substr.out");
string s;
int n, k, st, dr, mij, ans;
int h[DIM], p[DIM];
void buildh(){
p[0]=1;
for(int i=1; i<=n; i++)
p[i]=p[i-1]*BASE;
h[1]=s[0];
for(int i=2; i<=n; i++)
h[i]=h[i-1]*BASE+s[i-1];
}
int geth(int st, int dr){
return h[dr]-h[st-1]*p[dr-st+1];
}
bool check(int len){
unordered_map <int, int> mp;
for(int i=1; i<=n-len+1; i++){
int currh=geth(i, i+len-1);
mp[currh]++;
if(mp[currh]==k)
return 1;
}
return 0;
}
int32_t main(){
fin>>n>>k>>s;
buildh();
st=1; dr=n;
while(st<=dr){
mij=(st+dr)>>1;
if(check(mij)){
ans=mij;
st=mij+1;
}else dr=mij-1;
}
fout<<ans;
}