Cod sursa(job #1784590)

Utilizator andreicoman299Coman Andrei andreicoman299 Data 20 octombrie 2016 11:31:41
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1000000

#define BUF_SIZE 16384
char buf[BUF_SIZE];
int pbuf=BUF_SIZE;
FILE*fi,*fo;
inline char nextch(){
    if(pbuf==BUF_SIZE){
        fread(buf, BUF_SIZE, 1, fi);
        pbuf=0;
    }
    return buf[pbuf++];
}
inline long long nextnum(){
    long long a=0;
    char c=nextch();
    while((c<'0' || c>'9') && c!='-')
        c=nextch();
    int semn=1;
    if(c=='-'){
        semn=-1;
        c=nextch();
    }
    while('0'<=c && c<='9'){
        a=a*10+c-'0';
        c=nextch();
    }
    return a*semn;
}

int v[1000000];
int main(){
    fi=fopen("elmaj.in","r");
    fo=fopen("elmaj.out","w");
    int n=nextnum();
    int maj, nr;
    nr=0;
    maj=0;
    for(int i=0;i<n;i++){
        v[i]=nextnum();
        if(v[i]==maj)
            nr++;
        else{
            nr--;
            if(nr<0){
                maj=v[i];
                nr=1;
            }
        }
    }
    if(nr==0){
        fprintf(fo,"-1");
    }
    else{
        nr=0;
        for(int i=0;i<n;i++)
            if(v[i]==maj)
                nr++;
        if(nr>=n/2+1)
            fprintf(fo,"%d %d", maj, nr);
        else
            fprintf(fo,"-1");
    }
    fclose(fi);
    fclose(fo);
    return 0;
}