Cod sursa(job #2382656)

Utilizator PletoPletosu Cosmin-Andrei Pleto Data 18 martie 2019 16:14:07
Problema Elementul majoritar Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
/**
 * Given an array of N natural numbers, find the number that appears more than N/2 times.
 */

#include <bits/stdc++.h>

std::ifstream fin("elmaj.in");
std::ofstream fout("elmaj.out");

int N, element = -1, nr = 0;
std::vector<int> V;

int main() { 
    fin >> N;
    for(int x, i = 0; i < N; ++i) {
        fin >> x;
        V.push_back(x);
    }
    for(int i = 0; i < N; ++i) {
        if(nr < 0) {
            element = V[i];
            nr = 1;
        }
        else {
            if(element == V[i]) {
                ++nr;
            }
            else {
                --nr;
            }
        }
    }
    if(element >= 0) {
        nr = 0;
        for(int i = 0; i < N; ++i) {
            if(V[i] == element) {
                ++nr;
            }
        }
        if(nr < N/2+1) {
            element = -1;
        }
    }

    fout << element;
    if(element != -1) {
        fout << ' ' << nr << '\n';
    }
        
    fin.close();
    fout.close();
    return 0;
}