Pagini recente » Cod sursa (job #338507) | Cod sursa (job #412965) | Cod sursa (job #2471179) | Rating Paul aldea (Paluka) | Cod sursa (job #1081485)
#include <unordered_map>
#include <algorithm>
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
#define MAX_N 16500
#define BASE 123
string s;
unordered_map< int, int > h;
int check(int len, int n) {
int number = 0, power = 1;
for (int i = 0; i < len; ++i){
number = number * BASE + (int)s[i];
}
for (int i = 1; i < len; ++i){
power *= BASE;
}
h[number] = 1;
for (int i = len; i < n; ++i) {
number -= s[i - len] * power;
number = number * BASE + (int)s[i];
++h[number];
}
int ans = 0;
for (unordered_map< int, int >::iterator it = h.begin(); it != h.end(); ++it)
ans = max(ans, it->second);
h.clear();
return ans;
}
int binar(int n, int k) {
int i, pas = 1 << 14;
for (i = 0; pas; pas >>= 1)
if (i + pas <= n && check(i + pas, n) >= k)
i += pas;
return i;
}
int main() {
ifstream f("substr.in");
int n, k;
f >> n >> k;
f >> s;
ofstream o("substr.out");
o << binar(n, k);
}