Cod sursa(job #1246332)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 20 octombrie 2014 22:33:14
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#define NMAX 1000000
#define cin f
#define cout g

using namespace std;

int numarElemente, tablou[NMAX];

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

void citesteTablou(int &numarElemente, int tablou[])
{
	cin>>numarElemente;
	for (int i=0; i<numarElemente; ++i) cin>>tablou[i];
}

int candidatElementMajoritar(int numarElemente, int tablou[])
{
	int curent=tablou[0], numarAparitiiCurent=1;

	for (int i=1; i<numarElemente; ++i)
		if (numarAparitiiCurent!=0)
		{
			if (curent==tablou[i]) ++numarAparitiiCurent;
			else --numarAparitiiCurent;
		}
		else
		{
			curent=tablou[i];
			numarAparitiiCurent=1;
		}

	if (numarAparitiiCurent==0) return -1;
	return curent;
}

int numara(int numarElemente, int tablou[], int candidat)
{
	int numarAparitiiCandidat=0;

	for (int i=0; i<numarElemente; ++i)
		if (candidat==tablou[i]) ++numarAparitiiCandidat;

	return numarAparitiiCandidat;
}

int main()
{
	citesteTablou(numarElemente, tablou);

	int candidat=candidatElementMajoritar(numarElemente, tablou);

    int numar=numara(numarElemente, tablou, candidat);
	if (candidat!=-1 && numar>numarElemente/2) cout<<candidat<<" "<<numar<<"\n";
	else cout<<"-1\n";

	return 0;
}