Cod sursa(job #3279476)

Utilizator VladMinea123Minea Vlad VladMinea123 Data 23 februarie 2025 11:22:53
Problema Elementul majoritar Scor 100
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 1.51 kb
// Problema rezolvata pe Tutoriale-Pe.NET
// Citeste toata explicatia aici: http://tutoriale-pe.net/ro/elementul-majoritar-elmaj/
 
#include    <iostream>
#include    <fstream>
 
using namespace std;
 
ifstream fin("elmaj.in");
ofstream fout("elmaj.out");
 
const int LIM = 1000005;
 
int N;
int V[LIM];
 
void Read()
{
    fin >> N;
 
    // Citim vectorul normal
    for(int i = 0; i < N; i++)
        fin >> V[i];
 
    // Declaram variabilele descrise mai sus
    int contor = 0, candidat = 0, aparitii = 0;
 
    // Parcurgem vectorul
    for(int i = 0; i < N; i++)
    {
        // Atunci cand contorul este 0, alegem elementul curent ca fiind candidatul
        // si setam contorul pe "1"
        if(contor == 0)
        {
            candidat = V[i];
            contor = 1;
        }
        else
        {
            // Daca avem deja contorul pornit, verificam elementul curent si adaugam +1
            // daca este acelasi nr ca si candidatul, si scadem -1 in caz contrar
            if(V[i] == candidat)
                contor += 1;
            else
                contor -= 1;
        }
    }
 
    // Mai parcurgem o data vectorul pentru a numara de cate ori apare candidatul
    for(int i = 0; i < N; i++)
        if(V[i] == candidat)
            aparitii += 1;
 
    // Tratam cazul in care nu avem element majoritar
    if(aparitii < N / 2 + 1)
        fout << "-1";
    else
        fout << candidat << " " << aparitii;
}
 
int main()
{
    Read();
    return 0;
}