Cod sursa(job #854802)

Utilizator SteveStefan Eniceicu Steve Data 14 ianuarie 2013 08:19:04
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <iomanip>
#include <string>
#include <cstring>
#include <deque>
#include <stack>
#include <bitset>
#include <list>
#define pb push_back
#define pf push_front
#define pob pop_back
#define pof pop_front
#define mp(a,b) make_pair (a, b)
#define ll long long
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)

using namespace std;

int N, cnt;
int v[1000011];
stack <int> stiva;

void Citire ()
{
    ifstream fin ("elmaj.in");
    fin >> N;
    for (int i = 0; i < N; i++)
        fin >> v[i];
    fin.close ();
}

int Business ()
{
    for (int i = 0; i < N; i++)
    {
        if (stiva.empty () || stiva.top () == v[i]) stiva.push (v[i]);
        else stiva.pop ();
    }
    int K = stiva.top ();
    for (int i = 0; i < N; i++)
    {
        if (v[i] == K) cnt++;
    }
    if ((N & 1) && cnt > (N >> 1)) return K;
    if (!(N & 1) && cnt >= (N >> 1)) return K;
    return -1;
}

void Scriere ()
{
    ofstream fout ("elmaj.out");
    int a = Business ();
    if (a != -1) fout << a << " " << cnt;
    else fout << a;
    fout.close ();
}

int main ()
{
    Citire ();
    Scriere ();
    return 0;
}