Cod sursa(job #1120632)

Utilizator catalincraciunCraciun Catalin catalincraciun Data 25 februarie 2014 09:05:28
Problema Elementul majoritar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
/// Craciun Catalin
///  Elmaj
#include <fstream>
#include <iostream>

#define NMax 1000005

using namespace std;

ifstream f("elmaj.in");
ofstream g("elmaj.out");

long n;
long A[NMax];

int mooreMajority(long n, long a[]) {
    int cand = -1, k = 0;
    for (int i = 0; i < n; i++) {
        if (k == 0) {
            cand = a[i];
            k = 1;
        } else if (a[i] == cand) {
            k++;
        } else
            k--;
    }
    if (cand < 0)
        return cand;

    int nr = 0;
    for (int i = 0; i < n; i++) {
        if (a[i] == cand)
            nr++;
    }
    if (nr > n / 2)
        return cand;
    else
        return -1;
}

long elmaj()
{
    int cand=-1, k=0;
    for (long i=1;i<=n;i++)
    {
        if (k==0)
        {
            cand=A[i];
            k=1;
        }
        else if (cand==A[i])
            k++;
        else
            k--;
    }

    if (cand<0)
        return -1;

    long nr=0;
    for (long i=1;i<=n;i++)
        if (A[i]==cand)
            nr++;

    if (nr>n/2)
        return cand;
    else
        return -1;
}

void citire()
{
    f>>n;
    for (long i=0;i<n;i++)
        f>>A[i];
    f.close();
}

int main()
{
    citire();

    g<<mooreMajority(n, A)<<'\n';
    g.close();

    return 0;
}