Cod sursa(job #1896647)

Utilizator TamasFlorin96Tamas Florin TamasFlorin96 Data 28 februarie 2017 20:13:38
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <vector>
#include <fstream>
#include <algorithm>

std::pair<int,int> moore(std::vector<int> v) {
	int candidate = v[0];
	int count = 1;

	for (int i = 1; i < v.size(); i++) {

		if (v[i] == candidate) {
			count++;
		}
		else {
			count--;
		}

		if (count <= 0) {
			candidate = v[i];
			count = 1;
		}
	}

	count = 0;
	for (int i = 0; i < v.size(); i++) {
		if (v[i] == candidate)
			count++;
	}

	if (count > v.size() / 2)
		return std::make_pair(candidate, count);

	return std::make_pair(-1, -1);
}

int main(void) {
	std::ifstream in("elmaj.in");

	int n;
	in >> n;

	std::vector<int> v(n);

	for (int i = 0; i < n; i++)
		in >> v[i];

	in.close();

	std::ofstream out("elmaj.out");

	std::pair<int, int> result = moore(v);

	if (!result.second)
		out << -1;
	else
		out << result.first << " " << result.second;

	out.close();

	return 0;
}