Pagini recente » Cod sursa (job #1645621) | Cod sursa (job #1764257) | Cod sursa (job #1515778) | Cod sursa (job #2192126) | Cod sursa (job #2601552)
#include<bits/stdc++.h>
#define MOD 103
#define NMAX 17000
using namespace std;
ifstream fin("substr.in");
ofstream fout("substr.out");
typedef unsigned long long ull;
int n, k;
ull p[NMAX], h[NMAX];
char sir[NMAX];
map<ull, int> mp;
int CONV(char s){
if('a' <= s && s <= 'z')
return (s - 'a');
if('A' <= s && s <= 'Z')
return (s - 'A' + 26);
return (s - '0' + 52);
}
bool good(int mij){
mp.clear();
for(int i = 1; i <= n - mij + 1; ++i){
ull ax = h[i + mij - 1] - h[i - 1] * p[mij];
mp[ax]++;
}
for(auto it: mp)
if(it.second >= k)
return 1;
return 0;
}
int main()
{
fin >> n >> k;
fin.get();
fin >> (sir + 1);
p[0] = 1;
for(int i = 1; i <= n; ++i){
p[i] = p[i - 1] * MOD;
h[i] = (h[i - 1] * MOD + CONV(sir[i]) + 1);
}
int st = 0;
int rez = 0;
int dr = n;
while(st <= dr){
int mij = (st + dr) / 2;
if(good(mij))
rez = mij, st = mij + 1;
else dr = mij - 1;
}
fout << rez << '\n';
return 0;
}