Pagini recente » Cod sursa (job #2941627) | Cod sursa (job #518367) | Cod sursa (job #1447621) | Cod sursa (job #2034322) | Cod sursa (job #2988468)
#include <bits/stdc++.h>
using namespace std;
ifstream in("substr.in");
ofstream out("substr.out");
long long n, k;
const long long N = 20005;
char s[N];
const long long P = 89;
const long long mod = 1e9 + 7;
long long hsh[N], power[N];
long long check(long long lung)
{
map <long long, long long> mp;
for(long long i = 1; i <= n - lung + 1; i++)
{
long long aux = hsh[i + lung - 1] - hsh[i - 1] * power[lung];
mp[aux]++;
}
for(auto it:mp)
{
if(it.second >= k)
return 1;
}
return 0;
}
signed main()
{
in >> n >> k;
in.get();
in >> (s + 1);
power[0] = 1;
for(long long i = 1; i <= n; i++)
{
power[i] = (power[i - 1] * P);
}
for(long long i = 1; i <= n; i++)
{
hsh[i] = (hsh[i - 1] * P + (long long)s[i] + 1);
}
long long st = 0, dr = n, rasp = 0;
while(st <= dr)
{
long long med = (st + dr) >> 1;
if(check(med))
{
st = med + 1;
rasp = med;
}
else
{
dr = med - 1;
}
}
out << rasp << '\n';
return 0;
}