题目
使用优先队列解决
#include <iostream>
#include<queue>
using namespace std;
long long ans;
int main()
{
int n;cin>>n;
int x;
priority_queue<long long,vector<long long>,greater<long long> >q;
for(int i=0;i<n;i++)
{
cin>>x;
q.push(x);
}
///特判n=1,n=2的情况
if(n==1) cout<<q.top();
if(n==2)
{
int x=q.top();q.pop();
cout<<x+q.top();
}
else
{
while(q.size()>=2)///当q.size()==2时,就将所有的取出了
{
///每次取出最小的两个
long long x1=q.top();
q.pop();
long long x2=q.top();
q.pop();
///合并,再入队
ans+=x1+x2;
q.push(x1+x2);
}
cout<<ans;
}
}