範例程式碼 uva10954

//uva10954
#include <iostream>
#include <queue>
using namespace std;

typedef long long ll;

template <typename T,typename U,typename V>
T pop(priority_queue<T, U, V> &q) {
	T ret = q.top();
	q.pop();
	return ret;
}

int main() {
	int n;
	while (cin >> n) {
		if (n == 0) break;
		
		priority_queue<ll, vector<ll>,greater<ll>> q;
		while (n--) {
			int x;
			cin >> x;
			q.push(x);
		}
		
		ll sum = 0;
		while (q.size() > 1) {
			ll cost = pop(q) + pop(q);
			sum += cost;
			q.push(cost);
		}
		cout << sum << endl;
	}
	return 0;
}