Cod sursa(job #2083370)

Utilizator Horia14Horia Banciu Horia14 Data 7 decembrie 2017 17:08:38
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<cstdio>
#include<cstdlib>
#include<ctime>
#define MAX_N 1000000
using namespace std;

int v[MAX_N], n;

int main() {
    int Begin, End, b, e, pivot, ap, i, k, aux;
    FILE *fin, *fout;
    fin = fopen("elmaj.in","r");
    fout = fopen("elmaj.out","w");
    fscanf(fin,"%d",&n);
    for(i = 0; i < n; i++)
        fscanf(fin,"%d",&v[i]);
    Begin = 0;
    End = n - 1;
    k = n / 2;
    srand(time(NULL));
    while(Begin < End) {
        b = Begin;
        e = End;
        pivot = v[Begin + rand()%(End-Begin+1)];
        while(b <= e) {
            while(v[b] < pivot) b++;
            while(v[e] > pivot) e--;
            if(b <= e) {
                aux = v[b];
                v[b] = v[e];
                v[e] = aux;
                b++;
                e--;
            }
        }
        if(k <= e)
            End = e;
        else if(k >= b)
            Begin = b;
        else Begin = End = k;
    }
    for(ap = 0, i = 0; i < n; i++)
        if(v[i] == v[k])
            ap++;
    if(ap > n / 2)
        fprintf(fout,"%d %d\n",v[k],ap);
    else fprintf(fout,"-1\n");
    fclose(fin);
    fclose(fout);
    return 0;
}