您的位置:首页 > 其它

nyoj55懒省事的小明(STL优先队列)

2016-05-06 21:02 267 查看
题目地址:点击打开链接

题意:每次去消耗体力最小的堆相加并且入队,直到变为一堆

Code:
//一定邀记得用long long 因为体力在加的过程中会变得很大
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;

struct comp
{
bool operator()(long long &x,long long &y)          //定义优先级,小的数优先出队
{
return x>y;
}
};

priority_queue<long long,vector<long long>,comp>q;      //优先队列

int main()
{
long long t,n,a,res,i;
scanf("%lld",&t);
while(t--)
{
int x,y;
res=0;
scanf("%lld",&n);
for(i=0;i<n;i++)
{
scanf("%lld",&a);
q.push(a);
}
while(q.size()!=1)
{
x=q.top();
q.pop();
y=q.top();
q.pop();
x=x+y;
res+=x;
q.push(x);
}
while(!q.empty())
{
q.pop();
}
printf("%lld\n",res);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: