Pagini recente » Cod sursa (job #910549) | Cod sursa (job #1551900) | Cod sursa (job #2631790) | Cod sursa (job #202745) | Cod sursa (job #735220)
Cod sursa(job #735220)
#include <cstdio>
#include <stdlib.h>
#include <time.h>
#define MOD 666013
struct list{int x; struct list*next; }*h[MOD];
int n,k,v[MOD];
bool e[MOD];
void insert(int x){
int p=x%MOD;
v[p]++;
if(h[p]==NULL){
h[p]=new list; h[p]->x=x; h[p]->next=NULL; return; }
list*c=new list; c->x=x; c->next=h[p];
h[p]=c;
}
void process(int k){
int t=v[k],p=0,i,w,nr;
while(h[k]!=NULL){v[++p]=h[k]->x; h[k]=h[k]->next;}
srand(time(NULL));
while(t>=n/2+1){
while(e[(i=rand()%(p+2))]);
w=v[i]; nr=0;
for(i=1;i<=p;i++)
if(v[i]==w){ nr++; e[i]=1; }
if(nr>=n/2+1){printf("%d %d\n",w,nr);return;}
t-=nr;
}
printf("-1");
}
int main(){
int x;
freopen("elmaj.in","r",stdin);
freopen("elmaj.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
insert(x); }
k=0;
for(int i=1;i<MOD;i++)
if(v[i]>=n/2+1){k=i; break; }
if(k==0)printf("-1"); else process(k);
}