Cod sursa(job #658648)

Utilizator the_snyper06FMI - ALexandru Mihai the_snyper06 Data 9 ianuarie 2012 11:25:07
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<cstdio>
#include<vector>
#define M 719671

using namespace std;
struct numar { int valuare, aparitii; };
int n, nrMaj, aparitieMaj;
vector <numar> H[M];

int main() {
	int i, j, x, ind;
	bool insert;
	
	freopen("elmaj.in", "r", stdin), freopen("elmaj.out", "w", stdout);
	scanf("%d", &n);
	
	nrMaj = 0;
	aparitieMaj = 1;
	
	for(i = 1; i <= n; i++) {
		scanf("%d", &x);
		ind = x % M;
		insert = true;
		
		// caut numarul in hash
		for(j = 0; j < (int) H[ind].size(); j++)
			if(H[ind][j].valuare == x) {
				H[ind][j].aparitii++; // incrementez numarul sau de aparitii
				
				if(H[ind][j].aparitii > aparitieMaj) {
					aparitieMaj = H[ind][j].aparitii;
					nrMaj = H[ind][j].valuare;
				}
				
				insert = false;
				break;
			}
		
			// inserez numarul in hash daca nu a fost gasit
			if(insert) H[ind].push_back( (numar){x, 1} );
	}
	
	if(aparitieMaj == 1) nrMaj = x;
	if(aparitieMaj >= n / 2 + 1) printf("%d %d\n", nrMaj, aparitieMaj);
	else printf("-1\n");
	
	return 0;
}