Cod sursa(job #1069050)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 29 decembrie 2013 12:35:22
Problema Substr Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
#include<unordered_map>
#include<string>
#include<algorithm>

using namespace std;

const int Base = 123;

ifstream f("substr.in");
ofstream g("substr.out");

string str;
int n, k, ans;
unordered_map<unsigned int, int> h;

int check(int sz) {

	string x;
	unsigned key = 0, power = 1;
	int i, rez = 1;

	for (i = 0; i < sz; ++i) {
		if (i != 0)
			power *= Base;
		key = (key * Base + str[i]);
	}
	h[key] = 1;

	for (i = sz; i < n; ++i) {
		key = (key - str[i - sz] * power) * Base + str[i];
		h[key]++;
		rez = max(rez, h[key]);
	}

	return rez;
}

int main() {

	int st, dr, mid, aux;

	f >> n >> k >> str;

	st = 1;
	dr = n;

	while (st <= dr) {
		mid = (st + dr) / 2;
		aux = check(mid);
		h.clear();
		if (aux >= k) {
			ans = max(ans, mid);
			st = mid + 1;
		} else
			dr = mid - 1;
	}

	g << ans << "\n";

	f.close();
	g.close();

	return 0;
}