Cod sursa(job #1808792)

Utilizator rangalIstrate Sebastian rangal Data 18 noiembrie 2016 09:33:56
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <cmath>
#define in "elmaj.in"
#define out "elmaj.out"
#define mod 666013
#define A (sqrt(5)-1)/2

using namespace std;

ifstream fin(in);
ofstream fout(out);

struct nod{
    int info,ct;
    nod *urm;
} *h[mod];

int n;

inline int f(int X)
{
    return int(mod*(X*A-int(X*A)));
}

int main()
{
    fin>>n;
    for(int i=1; i<=n; ++i)
    {
        int X,r;
        fin>>X;
        r=f(X);

        nod *p;
        for(p=h[r]; p!=NULL && p->info!=X; p=p->urm);
        if(p==NULL)
        {
            nod *c=new nod;
            c->ct=1;
            c->info=X;
            c->urm=h[r];
            h[r]=c;
        }
        else ++(p->ct);
    }
    for(int i=0; i<mod; ++i)
    {
        nod *c;
        for(c=h[i]; c!=NULL && (c->ct)< n/2+1 ; c=c->urm);
        if(c!=NULL)
        {
            fout<<c->info<<" "<<c->ct<<"\n";
            return 0;
        }
    }

    fout<<"-1\n";
    fin.close(); fout.close();
    return 0;
}