Monday, November 2, 2015

UVa 10954 - Add All

// UVa 10954 - Add All
#include <iostream>
#include <queue>
using namespace std;

#define datatype unsigned long long int

struct data {
	datatype v;
};

bool operator <(const data & a, const data & b) {
	return a.v > b.v;
}

int main() {
	int n;
	cin >> n;
	while (n) {

		priority_queue<data> q;
		for (int i = 0; i < n; i++) {
			datatype v;
			cin >> v;
			q.push( { v });
		}

		datatype sol = 0;
		while (q.size() > 1) {
			datatype a = q.top().v;
			q.pop();
			datatype b = q.top().v;
			q.pop();
			datatype sum = a + b;
			sol += sum;
			q.push( { sum });
		}

		cout << sol << endl;
		cin >> n;
	}
	return 0;
}

No comments:

Post a Comment