Pagini recente » Cod sursa (job #100076) | Cod sursa (job #958144) | Cod sursa (job #2158712) | Cod sursa (job #866912) | Cod sursa (job #1511948)
#include <fstream>
#include <vector>
std::ifstream in("elmaj.in");
std::ofstream out("elmaj.out");
std::pair<int, int> mooreMajority(std::vector<int>& v) {
int candidate = -1, k = 0;
int n = v.size();
for (int i = 0; i < n; i++) {
if (k == 0) {
candidate = v[i];
k = 1;
} else if (v[i] == candidate) {
k++;
} else {
k--;
}
}
if (candidate < 0) {
return std::make_pair(candidate, -1);
}
int voters = 0;
for (int i = 0; i < n; i++) {
if (v[i] == candidate) {
voters++;
}
}
if (voters > (n / 2)) {
return std::make_pair(candidate, voters);
} else {
return std::make_pair(-1, -1);
}
}
int main() {
int n;
std::vector<int> v;
in >> n;
int nb;
for (int i = 1; i <= n; i++) {
in >> nb;
v.emplace_back(nb);
}
std::pair<int, int> p = mooreMajority(v);
if (p.first < 0) {
out << "-1" << '\n';
} else {
out << p.first << " " << p.second << '\n';
}
return 0;
}