Cod sursa(job #633989)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 15 noiembrie 2011 11:37:14
Problema Elementul majoritar Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>

using namespace std;

ifstream in("elmaj.in");
ofstream out("elmaj.out");

const int N=1000001;

int v[N],n,win,contor;// win este posibilul element majoritar

int main(){
	int i;
	in>>n;//citim primul element 
	for(i=1;i<=n;i++)
		in>>v[i];
	win=v[1];//initializam posibilul element majoritar ca fiind primul din vector 
	contor=1;//setam contorl cu valoarea 1 intrucat acesta a aparut o singura data
	for(i=2;i<=n;++i){
		in>>v[i];
		if(contor==0){//nu mai avem niciun element posibil majoritar 
			win=v[i];//reinitializam posibilul element majoritar cu valoarea curenta si trecem la urmatoarea valoare
			contor=1;
			continue;
		}
		if(v[i]==win)//daca elementul curent este acelasi cu cel posibil majoritar incrementam contorul
			contor++;
		else//elementul curent anuleaza o aparitie a posibilului element majoritar
			contor--;
	}
	contor=0;//resetam contorul pentru a numara toate aparitiile posibilului element majoritar din vectorul citit
	for(i=1;i<=n;++i){
		if(v[i]==win)
			contor++;
	}
	if(contor>=(n/2)){//daca contorul este >=[n/2] atunci elementul posibil devine sigur majoritar
		out<<win<<" "<<contor;
	}
	else
		out<<"-1";//altfel nu exista element majoritar 
	return 0;
}