Cod sursa(job #2224978)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 25 iulie 2018 17:18:33
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <vector>
#include <string>

using namespace std;

const string IN_FILE = "elmaj.in";
const string OUT_FILE = "elmaj.out";

int count(const vector<int>& values, const int value) {
    int c = 0;
    for (const auto& v : values) {
        c += v == value ? 1 : 0;
    }
    return c;
}

int findMajority(const vector<int>& values) {
    int value = -1, c = 0;
    for (const auto& v : values) {
        if (value == v) {
            c++;
        } else if (c > 0) {
            c--;
        } else {
            value = v;
            c = 1;
        }
    }
    return count(values, value) <= int(values.size()) / 2 ? -1 : value;
}

vector<int> readValues() {
    ifstream in(IN_FILE);
    int n;
    in >> n;
    auto values = vector<int>(n);
    for (int i = 0; i < n; i++) {
        in >> values[i];
    }
    in.close();
    return values;
}

void writeMajority(const int value, const int c) {
    ofstream out(OUT_FILE);
    out << value << (value == -1 ? "" : " " + to_string(c)) << "\n";
    out.close();
}

int main() {
    const auto values = readValues();
    const int value = findMajority(values);
    const int c = count(values, value);
    writeMajority(value, c);
    return 0;
}