Pagini recente » Cod sursa (job #2393872) | Cod sursa (job #2938126) | Cod sursa (job #2727545) | Cod sursa (job #1466063) | Cod sursa (job #1413725)
#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;
}