Cod sursa(job #1810824)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 20 noiembrie 2016 16:49:02
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <cstdio>
#include <algorithm>
using namespace std;
#define buff_size 1048576
char buff[buff_size];
int pos=0;
#define fastcall __attribute__((optimize("-O3")))
#define inline __inline__ __attribute__((always_inline))

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

inline fastcall void putChar(const char &C) {
    outBuff[outPtr++] = C;
    if (outPtr == buff_size) {
        fwrite(outBuff, 1, buff_size, stdout);
        outPtr = 0;
    }
}

inline fastcall 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 v[1000001],n,pairs=0,maj,cnt=0;
int main()
{
    freopen("elmaj.in","r",stdin);
    freopen("elmaj.out","w",stdout);
    fread(buff,  1,buff_size, stdin);
    read(n);
    for(int i=1;i<=n;++i)
    {
        read(v[i]);
        if(!pairs) maj=v[i],++pairs;
        else if(v[i]==maj) ++pairs;
        else --pairs;
    }
     for(int 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);
}