Cod sursa(job #765944)

Utilizator ioana26Ioana Andronescu ioana26 Data 9 iulie 2012 19:54:12
Problema Elementul majoritar Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.07 kb
/*
Element majoritar. 
Complexitate: O(n).
*/

#include <stdio.h>
#include <stdlib.h>

#define MAX     1000000

int n;
int vector[MAX];
int nr_aparitii, elem_majoritar, nr_elem_necuplate;

int cauta_element_majoritar () {
	int i;
    elem_majoritar = -1;
	nr_elem_necuplate = 0;
	
	for (i = 0; i < n; i++) {
		if (!nr_elem_necuplate) {
			elem_majoritar = vector[i];
			nr_elem_necuplate = 1;
		}
		else
			if (vector[i] != elem_majoritar)
				nr_elem_necuplate--;
			else 
				nr_elem_necuplate++;
	}
	
	if (nr_elem_necuplate < 0)
		return nr_elem_necuplate;
	
	nr_aparitii = 0;
	for (i = 0; i < n; i++) 
		if (vector[i] == elem_majoritar)
			nr_aparitii++;
	if (nr_aparitii >= n / 2 + 1)
		return elem_majoritar;
	return -1;
}

int main () {
    freopen("elmaj.in", "r", stdin);
    freopen("elmaj.out", "w", stdout);

    int i;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        scanf("%d", &vector[i]);

    elem_majoritar = cauta_element_majoritar();
	if (elem_majoritar < 0)
    	printf("%d\n", elem_majoritar);
	else
		printf("%d %d\n", elem_majoritar, nr_aparitii);

    return 0;
}