Cod sursa(job #3233233)

Utilizator MirceaDonciuLicentaLicenta Mircea Donciu MirceaDonciuLicenta Data 2 iunie 2024 20:20:58
Problema Elementul majoritar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

pair<int, int> findMajorityElement(const vector<int>& nums) {
    int candidate = 0;
    int count = 0;

    // Faza 1: Găsim candidatul majoritar folosind algoritmul Boyer-Moore
    for (int num : nums) {
        if (count == 0) {
            candidate = num;
            count = 1;
        } else if (num == candidate) {
            count++;
        } else {
            count--;
        }
    }

    // Faza 2: Verificăm dacă candidatul este cu adevărat majoritar
    count = 0;
    for (int num : nums) {
        if (num == candidate) {
            count++;
        }
    }

    if (count > nums.size() / 2) {
        return {candidate, count};
    } else {
        return {-1, -1};
    }
}

int main() {
    ifstream infile("elmaj.in");
    ofstream outfile("elmaj.out");

    if (!infile || !outfile) {
        cerr << "Error opening file" << endl;
        return 1;
    }

    int n;
    infile >> n;

    vector<int> nums(n);
    for (int i = 0; i < n; ++i) {
        infile >> nums[i];
    }

    pair<int, int> result = findMajorityElement(nums);

    if (result.first != -1) {
        outfile << result.first << " " << result.second << endl;
    } else {
        outfile << -1 << endl;
    }

    infile.close();
    outfile.close();

    return 0;
}