Cod sursa(job #742023)

Utilizator dbalutaDaniel Baluta dbaluta Data 27 aprilie 2012 21:44:49
Problema Elementul majoritar Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>

#define NMAX 1000000

int v[NMAX];
int N;

int solve(int *winner, int *app)
{
	int i;
	int cand = -1, k = 0;
	
	freopen("elmaj.in", "r", stdin);
	freopen("elmaj.out", "w", stdout);
	
	scanf("%d", &N);
	
	for (i = 0; i < N; i++)
		scanf("%d", &v[i]);
	
	for (i = 0; i < N; i++) {
		if (k == 0) {
			cand = v[i];
			k++;
		} else {
			if (v[i] != cand)
				k--;
			else
				k++;
		}
	}
	//printf("Going to print cand %d, k %d\n", cand, k);

	if (k <= 0) 
		return -1;
	
	/* check if we really have a winner */
	k = 0;
	for (i = 0; i < N; i++) 
		if (v[i] == cand) 
			k++;
	if (k >= N/2 + 1) {
		*winner = cand;
		*app = k;
		return 0;
	}
	return -1;
}
	
		
int main(void)
{
	int winner, app, ret;
	ret = solve(&winner, &app);
	if (ret < 0) 
		printf("-1\n");
	else
		printf("%d %d\n", winner, app);
	return 0;
}