Cod sursa(job #1990914)

Utilizator japjappedulapPotra Vlad japjappedulap Data 14 iunie 2017 09:45:00
Problema Elementul majoritar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
using namespace std;

int A[1000];

void printstk(stack<int> stk)
{
	while (!stk.empty() ) cout << stk.top() << ' ', stk.pop();
	cout << '\n';
}

#define DIM 1<<17
char buff[DIM];
int poz = 0;
 
void citeste(int &numar)
{
    numar = 0;
    //cat timp caracterul din buffer nu e cifra ignor
    while (buff[poz] < '0' || buff[poz] > '9')
        //daca am "golit" bufferul atunci il umplu
        if (++poz == DIM)
            fread(buff, 1, DIM, stdin), poz = 0;
    //cat timp dau de o cifra recalculez numarul
    while ('0' <= buff[poz] && buff[poz] <= '9')
    {
        numar = numar * 10 + buff[poz] - '0';
        if (++poz == DIM)
            fread(buff, 1, DIM, stdin), poz = 0;
    }
}
 

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

	stack <int> Stk;
	int N;
	citeste(N);
	for (int i = 1; i <= N; ++i)
		citeste(A[i]);
	for (int i = 1; i <= N; ++i)
	{
		if (Stk.empty())
			Stk.push(A[i]);
		else if (A[i] == Stk.top())
			Stk.push(A[i]);
		else
			Stk.pop();

		//printstk(Stk);
	}
	if (Stk.empty())
	{
		cout << -1;
		return 0;
	}
	int cand = Stk.top();
	int cnt = 0;
	for (int i = 0; i < N; ++i)
		if (A[i+1] == cand)
			cnt++;
	
	if (cnt > N/2)
		cout << cand << ' ' << cnt;
	else
		cout << -1;
	return 0;
}