Cod sursa(job #2253429)

Utilizator b10nd3Oana Mancu b10nd3 Data 3 octombrie 2018 23:02:00
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb

// hashuri 2

#include<iostream>
#include<fstream>
#include<vector>

using namespace std;

#define MOD 666013
vector< pair<long long,int> > h[MOD];

vector< pair <long long,int> >::iterator findValue(long long x) {
	int bucket=x%MOD;
	vector< pair<long long,int> >::iterator it;
	for(it=h[bucket].begin();it!=h[bucket].end();it++)
	   if(it->first==x) return it;
    return h[bucket].end();
} 

int insertUpdate(long long x){
	vector<pair <long long,int> >::iterator it=findValue(x);
    if(it==h[x%MOD].end()){
       h[x%MOD].push_back(pair<int,int>(x,1));	
	   return 1;
	}
    it->second++;
	return it->second;
}

int main(){
ifstream in("elmaj.in");
int n,i,x;
long long sol=-1; 
in>>n;
for(i=0;i<n;i++){
	in>>x;
	if(insertUpdate(x)>n/2) sol=x;
}

FILE *out=fopen("elmaj.out","w");
if(sol==-1) fprintf(out,"-1");
else  fprintf(out,"%lld %i",sol,findValue(sol)->second); 
fclose(out);

in.close();
return 0;
}