Cod sursa(job #2219152)

Utilizator fetti_danutzdezactivat fetti_danutz Data 7 iulie 2018 14:57:49
Problema Elementul majoritar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 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();
};