Pagini recente » Cod sursa (job #821739) | Cod sursa (job #324884) | Cod sursa (job #1096609) | Cod sursa (job #2665062) | Cod sursa (job #2908965)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("substr.in");
ofstream fout("substr.out");
const int mod = 1e9 + 7;
int p[16384],v3[16384];
char v[16384];
int chck(int nr,int n){
int cod = 0,i,ans = 0,cnt = 0,cnt2 = 1;
//for(i = 0;i < n;i++)fout<<v[i]<<' ';
for(i = 0;i < nr - 1;i++){
cod = (256ll*cod + v[i])%mod;
}
for(i = nr - 1;i < n;i++){
cod = (256ll*cod + v[i])%mod;
v3[cnt++] = cod;
cod = (cod - 1ll*p[nr - 1]*v[i - nr + 1])%mod;
if(cod < 0)cod+=mod;
}
sort(v3,v3 + cnt);
for(i = 1;i < cnt;i++){
if(v3[i] == v3[i - 1]){
cnt2++;
}else{
ans = max(ans,cnt2);
cnt2 = 1;
}
}
ans = max(ans,cnt2);
//fout<<nr<<' '<<ans<<'\n';
return ans;
}
int bs(int l,int r,int n,int k){
if(l == r)return l;
int mij = (l + r + 1)/2;
if(chck(mij,n) >= k){
return bs(mij,r,n,k);
}else return bs(l,mij - 1,n,k);
}
int main()
{
int n,k,i;
fin>>n>>k;
for(i = 0;i < n;i++){
fin>>v[i];
}
p[0] = 1;
for(i = 1;i < n;i++){
p[i] = p[i - 1]*256%mod;
}
fout<<bs(1,n,n,k);
return 0;
}