Cod sursa(job #1049434)

Utilizator miu_mik93FMI - Paduraru Miruna miu_mik93 Data 7 decembrie 2013 12:47:43
Problema Elementul majoritar Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <stdio.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <queue>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <unordered_map>

using namespace std;

#define NMAX 1000001
#define ERROR 0.0001


struct key
{
	int numberKey;
	int value;
};

int N, a[NMAX];
FILE *g;

struct hashes
{
	vector<key>v;
	int find (int x)
	{
		for (int i = 0; i < v.size(); i++)
			if ( x == v[i].numberKey )
				return i;
		return -1;
	}

	void Add(int x)
	{
		int index = find(x);
		if (index == -1)
		{
			key k = {x, 1};
			v.push_back(k);
		}
		else
		{
			v[index].value ++;
		}
	}
	// vector v
};

void hashMajority(int n, int *a )
{
	hashes h;
	for (int i = 1; i <= n; i++) 
		h.Add(a[i]);

	int found = 0;
	for (int i = 0; i < h.v.size() && !found; i++)
	{
		if (h.v[i].value > n/2)
        {
			fprintf (g, "%d %d", h.v[i].numberKey, h.v[i].value);
			found = 1;
		}
    }
	if ( !found )
		fprintf (g, "-1");
}

int main()
{
	
	FILE *f = fopen ("elmaj.in", "r");
	g = fopen ("elmaj.out", "w");
	fscanf(f, "%d", &N);
	for (int i = 1; i <= N; i++)
	{
		fscanf (f, "%d", &a[i]);
	}

	hashMajority(N, a);

	fclose(f);
	fclose(g);
	return 0;
}