Cod sursa(job #1995508)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 28 iunie 2017 10:52:41
Problema Coduri Huffman Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#include <queue>

using namespace std;

int n;
int nrDeScazut;
queue<int> q1;
queue<int> q2;

void citire()
{
	scanf("%d", &n);
	int tmp;

	for(int i = 0; i < n; i++)
	{
		scanf("%d", &tmp);
		q1.push(tmp);
		nrDeScazut += tmp;
	}
}

int gasireMinim()
{
	int tmp1, tmp2;

	if(q1.empty() == true)	
	{
		tmp1 = q2.front();	
		q2.pop();
		return tmp1;
	}

	if(q2.empty() == true)	
	{
		tmp1 = q1.front();	
		q1.pop();
		return tmp1;
	}

	tmp1 = q1.front();
	tmp2 = q2.front();

	if(tmp1 <= tmp2)
	{
		q1.pop();	
		return tmp1;
	}
	else
	{
		q2.pop();
		return tmp2;
	}
}

void solve()
{
	int nr1, nr2;
	int solutie = 0;

	while(q1.empty() == false || q2.empty() == false)
	{
		nr1 = gasireMinim();
		nr2 = gasireMinim();
		solutie += (nr1 + nr2);
		q2.push(nr1 + nr2);
	}

	printf("%d", solutie - nrDeScazut);
}

int main()
{
	freopen("huffman.in", "r", stdin);
	freopen("huffman.out", "w", stdout);

	citire();
	solve();

	return 0;
}