Cod sursa(job #1413725)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 2 aprilie 2015 01:48:36
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.95 kb
#include <iostream>
#include <cstdio>
#include<cstdlib>
using namespace std;
int prim=1000003;
int n,majoritar,minim,apr;
typedef struct Noduri
{
    int val;
    int ap=0;
    struct Noduri *urm;
} Nod;

Nod *h[1000005];

void adauga(int val, int poz)
{
    if(h[poz]==NULL)
    {
        h[poz]=(Nod *)malloc(sizeof(Nod));
        h[poz]->urm=NULL;
        h[poz]->val=val;
        h[poz]->ap=1;
    }
    else
    {
        int aparitii=0;
        Nod *p=h[poz];
        while(p)
        {
            if(p->val == val){aparitii++; p->ap=p->ap +1; if(p->ap >= minim){majoritar=p->val; apr=p->ap;} }
            p=p->urm;
        }
        if(!aparitii)
        {
            p=(Nod *)malloc(sizeof(Nod));
            p->urm=h[poz];
            p->val=val;
            h[poz]=p;
            p->ap=1;
        }
    }
}

void sterge(int val, int poz)
{
    if(h[poz])
    {
        Nod *p,*r;
        if(h[poz]->val == val){ p=h[poz];  h[poz]=h[poz]->urm; free(p); }
        else
        {
            p=h[poz]->urm;
            Nod *q=h[poz];
            while(p)
            {
                if(p->val == val)
                {

                    q->urm=p->urm;
                    free(p);
                    p=NULL;

                }
                else
                {
                    q=q->urm;
                    p=p->urm;

                }
            }

        }
    }
}

int verif(int val, int poz)
{
    if(!h[poz])return 0;
    Nod *p=h[poz];
    while(p)
    {
        if(p->val == val)return 1;
        p=p->urm;
    }
    return 0;

}


int main()
{
    freopen("elmaj.in","r",stdin);
    freopen("elmaj.out","w",stdout);
    cin>>n;
    minim=n/2+1;

    int a;
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&a);
        adauga(a,a%prim);

    }
    if(!majoritar)cout<<0<<'\n';
    else { cout<<majoritar<<" "<<apr<<'\n'; }



    return 0;
}