Cod sursa(job #1511948)

Utilizator dinuandAndrei-Mario Dinu dinuand Data 27 octombrie 2015 13:20:42
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#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;
}