Tuesday, July 5, 2016

UVa 10954 Add All

#include <bits/stdc++.h>
#define LL long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define pri(a) cout << a << endl;
#define prii(a,b) cout << a << " " << b << endl;
using namespace std;

int main()
{
    int n,x;

    while(scanf("%d", &n)==1 and n)
    {
        priority_queue<int> pq;
        // priority_queue < int, vector<int>, greater<int> > pq;


        REP(i,n)
        {
            scanf("%d", &x);
            pq.push(-x);
        }
        LL sm = 0;
        while(SZ(pq)>1)
        {
            int a = pq.top(); pq.pop();
            int b = pq.top(); pq.pop();
            sm += -(a+b);
            pq.push(a+b);
        }
        printf("%lld\n", sm);
    }
    return 0;
}