Cod sursa(job #1715329)

Utilizator RaileanuCristian Raileanu Raileanu Data 10 iunie 2016 12:41:02
Problema Elementul majoritar Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f1("elmaj.in");
ofstream f2("elmaj.out");
#define NMAX 1000*1001

int a[NMAX], n;

int majoritar(int n, int a[])
{
    int cand=-1 , k=0, i;

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

    if (cand < 0)
        return cand;

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

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

int main()
{
    int i;

    f1>>n;
    for (i=1; i<=n; i++)
        f1>>a[i];

    int winner = majoritar(n,a);

    int nr=0;

    if (winner > 0)
    {
        for (i=1; i<=n; i++)
            if (a[i] == winner)
                nr++;

        f2<< winner << " " << nr;
    }
    else
        f2<<"-1";

    f2.close();

    return 0;
}