Cod sursa(job #1684919)

Utilizator TheNechizFMI Razvan Birisan TheNechiz Data 11 aprilie 2016 12:55:29
Problema Elementul majoritar Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 1.78 kb
#include <stdio.h>
#define InFile "elmaj.in"
#define OutFile "elmaj.out"

struct nod
{
    int x,aparitii;
    struct nod *urm;
};
typedef struct nod nod;
int elmaj = -1,k;

void Inserare( nod **prim , int numar )
{
    if( !*prim )
    {
        nod * nou = (nod*)malloc(sizeof(nod));
        nou->aparitii = 0;
        nou->x = numar;
        nou->urm = NULL;
        *prim = nou;
    }
    else if( (*prim)->x > numar )
    {
        nod * nou = (nod*)malloc(sizeof(nod));
        nou->aparitii = 0;
        nou->x = numar;
        nou->urm = *prim;
        *prim = nou;
    }
    else
    {
        nod *it = *prim;
        for(; it->urm ; it = it->urm )
            if( it->x == numar )
            {
                it->aparitii++;
                if( k < it->aparitii )
                {
                    k = it->aparitii;
                    elmaj = it->x;
                }
                return;
            }
            else if( it->urm->x > numar )
            {
                nod * nou = (nod*)malloc(sizeof(nod));
                nou->aparitii = 0;
                nou->x = numar;
                nou->urm = it->urm;
                it->urm = nou;
                return;
            }
        nod * nou = (nod*)malloc(sizeof(nod));
        nou->aparitii = 0;
        nou->x = numar;
        nou->urm = NULL;
        it->urm = nou;
    }
}

int main()
{
    freopen(InFile,"r",stdin);
    freopen(OutFile,"w",stdout);

    nod *prim = NULL;
    int N,x,i;
    scanf("%d",&N);
    for( i = 1 ; i <= N ; ++i )
    {
        scanf("%d",&x);
        Inserare(&prim,x);
    }
    if( elmaj == -1 )
        printf("%d",-1);
    else
        printf("%d %d",elmaj,k+1);

    fclose(stdin);
    fclose(stdout);
    return 0;
}