Pagini recente » Cod sursa (job #1116759) | Cod sursa (job #2406686) | Cod sursa (job #2431111) | Cod sursa (job #2888327) | Cod sursa (job #3259391)
#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");
map <int, int> mp;
string s;
int _hash[DIM], power[DIM];
int n, i, k, st, dr, mij, ret;
void Build_Hash(){
power[0] = 1;
for(i=1;i<=n;i++)
power[i] = power[i - 1] * BASE;
_hash[1] = s[0];
for(i=2;i<=n;i++)
_hash[i] = _hash[i - 1] * BASE + s[i];
}
int get_hash(int st, int dr){
return (_hash[dr] - _hash[st - 1] * power[dr - st + 1]);
}
bool check(int ret){
mp.clear();
for(i=1;i<s.size()-ret;i++){
mp[get_hash(i, i + ret - 1)]++;
if(mp[get_hash(i, i + ret - 1)] >= k)
return true;
}
return false;
}
int32_t main(){
fin >> n >> k >> s;
Build_Hash();
st = 1, dr = n;
while(st <= dr){
mij = (st + dr) >> 1;
if(check(mij)){
ret = mij;
st = mij + 1;
}
else dr = mij - 1;
}
fout << ret;
}