Cod sursa(job #635191)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 18 noiembrie 2011 18:37:26
Problema Elementul majoritar Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>
#include <list>

using namespace std;

const char inFile[] = "elmaj.in";
const char outFile[] = "elmaj.out";

const int hashSize = 5000;

list<pair<int, int> > List[5000];

int N;
int element = -1;

void Citire();
void Afisare();
int find(int value);
int rest(int value);
void insert(int value);


void Citire()
{
	fstream fin(inFile, ios::in);
	
	fin >> N;

	int current;
	for(int i = 0 ; i < N; i++)
	{
		fin >> current;
		insert(current);
	}

	fin.close();
}

void Afisare()
{
	fstream fout(outFile, ios::out);
	if(element == -1)
	{
		fout << "-1\n";
	}
	else
	{
		fout << element << " " << find(element) << "\n";
	}
	fout.close();
}


int rest(int value)
{
	return value % hashSize;
}

void insert(int value)
{
	int h = rest(value);
	bool gasit = false;
	for(list<pair< int, int> >::iterator itr = List[h].begin(); itr != List[h].end();
		itr++)
	{
		if(itr->first == value)
		{
			gasit = true;
			itr->second ++;
			if(itr->second > N/2)
			{
				element = itr->first;
			}
			break;
		}
	}
	
	if( gasit == false)
	{
		List[h].push_back(make_pair(value, 1));
	}

}


int find(int value)
{
	int h = rest(value);
	for(list<pair< int, int> >::iterator itr = List[h].begin(); itr != List[h].end();
		itr++)
	{
		if(itr->first == value)
		{
			return itr->second;
		}
	}
	return -1;
}



int main(int argc, char* argv[])
{
	
	Citire();
	Afisare();
}