Pagini recente » Cod sursa (job #477964) | Cod sursa (job #2216588) | Cod sursa (job #678156) | Cod sursa (job #2062992) | Cod sursa (job #3209568)
#include <bits/stdc++.h>
#define P 777013
using namespace std;
ifstream fin("substr.in");
ofstream fout("substr.out");
short n, k;
char s[16400];
unordered_map<int, short> M;
int Check(int L)
{
M.clear();
int i, x1, c1;
short maxi = 1;
x1 = 0;
c1 = 1;
for(i = 1;i < L;i++)
c1 = c1 * 26 % P;
for(i = 0;i < L;i++)
x1 = (x1 * 26 + s[i] - 'a') % P;
M[x1]++;
for(i = L;s[i] != 0;i++)
{
x1 = (x1 - c1 * (s[i-L] - 'a') + P) % P;
x1 = (x1 * 26 + s[i] - 'a') % P;
M[x1]++;
maxi = max(maxi, M[x1]);
}
return (maxi >= k);
}
int CautBin()
{
int st, dr, mij, ans = 0;
st = 1;
dr = strlen(s);
while(st <= dr)
{
mij = (st + dr) / 2;
if(Check(mij))
{ans = mij;st = mij + 1;}
else dr = mij - 1;
}
return ans;
}
int main()
{
fin >> n >> k;
fin.get();
fin >> s;
fout << CautBin() << "\n";
fout.close();
return 0;
}