练习场acm 题目55 懒省事的小明

来源:互联网 发布:西溪悦榕庄 知乎 编辑:程序博客网 时间:2024/05/02 01:12

解法:优先队列!

 #include<bits/stdc++.h>#define ll long longusing namespace std;struct cmp{    bool operator ()(const int a,const int b) const    {        return a>b;    }};int main(){    int T;    cin>>T;    while(T--)    {        ll n,a;        cin>>n;        priority_queue<ll,vector<ll>,cmp>pq;        for(int i=0;i<n;i++)        {            cin>>a;            pq.push(a);        }        if(n==1)        {            cout<<n<<"\n";            continue;        }        ll s=0;        for(ll i=0;i<n;i++)        {            ll sum=0;            ll x=pq.top();            pq.pop();            sum+=x;            x=pq.top();            pq.pop();            sum+=x;            s+=sum;            if(pq.empty())                break;            pq.push(sum);        }        cout<<s<<"\n";    }    return 0;}        


 

0 0
原创粉丝点击