Cod sursa(job #2219607)

Utilizator dfettiDaniel Fetti dfetti Data 9 iulie 2018 13:44:04
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string.h>
 
using namespace std;
 
int DIM = 10;
 
ofstream fout("elmaj.out");
 
int N;
int *A;
 
void Read();
void Check(int pos);
 
int main()
{
    Read();
    srand(time(NULL));
 
 
    if (N < DIM)
        DIM = (N >> 1) + 1;
 
    int *test = (int*)malloc(DIM * sizeof(int));
    memset(test, 0, DIM * sizeof(int));
 
    for (int i = 0; i < DIM; )
    {
        int proposed = rand() % N;
     
        for (int j = 0; j < i; ++j)
            if (test[j] == proposed)
                goto pass;
 
        test[i] = proposed;
        i++;
         
    pass:
        ;
    }
 
    //cout << DIM << "\n";
    for (int i = 0; i < DIM; ++i)
        Check(test[i]);
 
    fout << -1;
    fout.close();
    return 0;
}
 
void Check(int pos)
{
    //cout << pos << ' ' << A[pos] << '\n';
    int count = 0;
    for (int i = 0; i < N; ++i)
        if (A[i] == A[pos])
            count++;
 
    if (count > (N >> 1))
    {
        fout << A[pos] << ' ' << count;
        fout.close();
        exit(0);
    }
    else
        return;
};
 
 
void Read()
{
    ifstream fin("elmaj.in");
     
    fin >> N;
    A = (int*)malloc(N * sizeof(int));
 
    for (int i = 0; i < N; i++)
        fin >> A[i];
     
    fin.close();
};