Cod sursa(job #2220932)

Utilizator inquisitorAnders inquisitor Data 12 iulie 2018 21:05:40
Problema Elementul majoritar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <cstdio>

__attribute__((always_inline)) unsigned int get_number()
{
    static char inBuffer[0x8000];

    static unsigned int p = 0x0; unsigned int number = 0x0;

    while(inBuffer[p] < 0x30 || inBuffer[p] > 0x39)
    {
        ++p == 0x8000 && (fread(inBuffer, 0x1, 0x8000, stdin), p = 0x0);
    }

    for(;;)
    {
        number = number * 0xA + inBuffer[p] - 0x30;

        ++p == 0x8000 && (fread(inBuffer, 0x1, 0x8000, stdin), p = 0x0);

        if(inBuffer[p] < 0x30 || inBuffer[p] > 0x39) break;
    }

    return number;
}

unsigned int v[1000001];

int main()
{
    unsigned int N = get_number(), x, candidate, unpaired = 0;

    for(unsigned int i = -~N; --i;)
    {
        x = get_number();

        if(x == candidate)
        {
            ++unpaired;
        }
        else
        {
            if(unpaired)
            {
                --unpaired;
            }
            else
            {
                candidate = x;

                unpaired = 0x1;
            }
        }

        v[i] = x;
    }

    unpaired = 0x0;

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

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

    return 0x0;
}