Cod sursa(job #864980)

Utilizator RaduDoStochitoiu Radu RaduDo Data 25 ianuarie 2013 21:41:52
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<cstdio>
#include<iostream>
#define maxn 1000050
using namespace std;
int el,n,i,aux,a[maxn];

int elmaj(int n,int a[])
{
    int cand=-1,k=0,i,nr=0;
    for(int i=0;i<n;++i)
    {
        if(k==0)
        {
            cand=a[i];
            k=1;
        }
        else
            if(a[i]==cand)
            {
                k++;   // nu am putut împerechea pe votantul i şi astfel trebuie să mărim numărul de votanţi necuplaţi
            }
            else
                k--;   // cuplăm votantul i cu orice votant ce îl susţine pe cand şi micşorăm astfel numărul de votanţi necuplaţi
    }
    if(cand<0)
        return cand;
    // verificare
    for(i=0;i<n;++i) {
        if (a[i] == cand)
            nr++;
    }
    if (nr>n/2)
    {
        aux=nr;
        return cand;
    }
    else
        return -1;
}

int main()
{
    freopen("elmaj.in","r",stdin);
    freopen("elmaj.out","w",stdout);
    scanf("%d",&n);
    for(i=0;i<n;++i)
        scanf("%d",&a[i]);
    el=elmaj(n,a);
    if(el!=-1)
        printf("%d %d\n",el,aux);
    return 0;
}