Cod sursa(job #1081479)

Utilizator BuseSorinFMI Buse Sorin-Marian BuseSorin Data 13 ianuarie 2014 17:52:34
Problema Substr Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <unordered_map>
#include <algorithm>
#include<fstream>

using namespace std;

#define MAX_N 16500
#define BASE 123

char s[MAX_N];
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;

	ofstream o("substr.out");
	o << binar(n, k);
}