Cod sursa(job #1025453)

Utilizator handz.FMI Andrei Tanasescu handz. Data 9 noiembrie 2013 23:32:17
Problema Elementul majoritar Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f_in("elmaj.in");
ofstream g_out("elmaj.out");

#define maxN 1000001
int v[maxN];

typedef struct nod
{
    int info;
    nod* next;
}NOD;
typedef NOD* Nod;

void push(Nod &S,int val)
{
    Nod nou;
    nou=new NOD;
    nou->info=val;
    nou->next=S;
    S=nou;
}

void pop(Nod &S)
{
    Nod aux=S->next;
    delete S;
    S=aux;
}

int peek(Nod S)
{
    return S->info;
}

void find_majority(int n)
{
    NOD *S; int i,elem,nr,k=0;
    S=new NOD;
    S->info=-1;
    S->next=NULL;

    for(i=1; i<=n ;i++)
    {
        if(S->info==-1)
        {
            S->info=v[i];
            k++;
        }
        else if(S->info==v[i])
        {
            push(S,v[i]);
            k++;
        }
        else
        {
            if(k==1)
            {
                S->info=-1;
                k=0;
            }
            else
            {
                pop(S);
                k--;
            }
        }
    }

    elem=peek(S);
    if(elem==-1)
    {
        g_out<<elem;
    }
    else
    {
        nr=0;
        for(i=1; i<=n ;i++)
            if(elem==v[i]) nr++;

        g_out<<elem<<" "<<nr;
    }

}

int main()
{
    int i,n;
    f_in>>n;
    cout<<endl<<" Hello world !";
    cout<<n<<endl;

    for(i=1; i<=n ;i++)
    {
        f_in>>v[i];
    }

    for(i=1; i<=n ;i++)
    {
        cout<<v[i]<<" ";
    }

    find_majority(n);

    return 0;
}