P1090 合并果子

· · 个人记录

#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cmath>
#include <ctime>
#define MAX 2000000000
#define INF 2333330303.3
#define rg register
#define min(a,b) (a)<(b)?(a):(b)
#define max(a,b) (a)>(b)?(a):(b)
#define abs(a) ((a)>0?(a):-(a))
#define ll long long 
using namespace std;
inline int read()
{
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')
    {
        if(c=='-')
        {
            f=-1;
        }
        c=getchar();
    }
    while(c<='9'&&c>='0')
    {
        x=(x<<1)+(x<<3)+(c^48);
        c=getchar();
    }
    return x*f;
}
int n,a[10001];
priority_queue<int,vector<int>,greater<int> > q;
ll sum,ans;
int main()
{
    n=read();
    for(rg int i=1;i<=n;++i)
    {
        a[i]=read();
        q.push(a[i]);
    }
    while(q.size()!=1)
    {
        int top1=q.top();
        q.pop();
        int top2=q.top();
        q.pop();
        sum=top1+top2;
        ans+=sum;
        q.push(sum); 
    }
    cout<<ans;
}