Cod sursa(job #1810789)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 20 noiembrie 2016 16:23:47
Problema Elementul majoritar Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <algorithm>
using namespace std;
#define buff_size 1000001
char buff[buff_size];
int pos=0;

inline void read(int &nr)
{
    while(!isdigit(buff[pos])) pos++;
    nr = 0;
    while(isdigit(buff[pos]))
    {
        nr = (nr<<1)+(nr<<3)+ buff[pos] - 48;
        pos++;
    }
}
char outBuff[buff_size];
int outPtr;

inline void putChar(const char &C) {
    outBuff[outPtr++] = C;
}

inline  void write(int X) {
    static char digs[10];
    int n = 0, q;
    do {
        q = X / 10;
        digs[n++] = X - (q << 1) - (q << 3) + 48;

        X = q;
    } while (X);
    while (n--) {
        putChar(digs[n]);
    }
    putChar(' ');

}
int i,n,pairs=0,v[1000001],maj,cnt=0;
int main()
{   freopen("elmaj.in","r",stdin);
    freopen("elmaj.out","w",stdout);
    fread(buff,  1,buff_size, stdin);
    read(n);
    for(i=1;i<=n;++i)
    {
        read(v[i]);
        if(!pairs) maj=v[i],++pairs;
        else if(v[i]==maj) ++pairs;
        else --pairs;
    }
     for(i=1;i<=n;++i) if(v[i]==maj) cnt++;
    if(cnt>n/2) write(maj),write(cnt);
    else putChar('-'),putChar('1');
    fwrite(outBuff, 1, outPtr, stdout);
}