Cod sursa(job #2226956)

Utilizator inquisitorAnders inquisitor Data 30 iulie 2018 20:45:05
Problema Elementul majoritar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <unistd.h>

char inBuffer[16777216];

size_t v[1000001], p = -1;

__attribute__((always_inline)) size_t get_number()
{
    size_t x = 0;

    while ('0' <= inBuffer[p]) {
        x = x * 10 + (inBuffer[p] - '0');
        p++;
    }

    p++;
    return x;
}

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

    read(STDIN_FILENO, inBuffer, 16777216);

    size_t N = get_number(), candidate, unpaired = 0;

    for(size_t i = -~N; --i;)
    {
        v[i] = get_number();

        if(unpaired == 0)
        {
            candidate = v[i];

            unpaired = 0x1;
        }
        else if(v[i] != candidate) --unpaired;

        else ++unpaired;
    }

    unpaired = 0x0;

    for(size_t i = -~N; --i;)
    {
        unpaired += v[i] == candidate;
    }

    printf(unpaired > N >> 1 ? "%d %d" : "-1", candidate, unpaired);

    return 0x0;
}