Pagini recente » Cod sursa (job #3200220) | Cod sursa (job #492797) | Cod sursa (job #2044396) | Cod sursa (job #1296567) | Cod sursa (job #1996246)
#include <bits/stdc++.h>
using namespace std;
ifstream in("elmaj.in");
ofstream out("elmaj.out");
const int NMax = 1e6 + 5;
// algoritmul Boyer - Moore al votului majoritar
// algoritmul se bazeaza pe ideea de a cupla
// cate doi sustinatori a doi candidati diferiti
// Daca exista element majoritar, cel putin un sustinator al acestuia
// va ramane garantat necuplat
int N;
int v[NMax];
int main() {
in>>N;
int cand = -1, nr = 0;
// nr - numarul de sustinatori necuplati ai candidatului cand
for (int i=1;i <= N;++i) {
in>>v[i];
if (!nr) {
cand = v[i];
++nr;
}
else if (v[i] == cand) {
++nr;
}
else {
--nr;
}
}
nr = 0;
for (int i=1;i <= N;++i) {
if (v[i] == cand) {
++nr;
}
}
if (nr > N/2) {
out<<cand<<' '<<nr<<'\n';
}
else {
out<<"-1\n";
}
in.close();out.close();
return 0;
}