![]([NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G - 洛谷)
代码内附队列讲解
#include<bits/stdc++.h>
#include<queue>
#define int long long
using namespace std;
struct node
{
int x;
node (int xx) {x=xx;}
friend bool operator < (node a,node b)
{
return a.x>b.x;
}
};
priority_queue<node> q;
int n,a[114514],sum=0,x;
signed main(){
cin>>n;
for (int i=1;i<=n;i++){
cin>>x; q.push(node(x));
}
for (int i=1;i<n;i++){
int w1=q.top().x; q.pop();
int w2=q.top().x; q.pop();
sum=w1+w2+sum;
q.push(node(w1+w2));
}
cout<<sum;
return 0;
}
/*
普通队列
头文件: #include<queue>
队列的定义: queue<int> q;
入队(push): q.push(x);
出队(pop) : q.pop();
队列为空: q.empty();
队列的长度: q.size();
输出队头元素:x=q.front(); //不出队
输出队尾元素:x=q.back();
struct node
{
int x;
friend bool operator < (node a,node b)
{
return a.x>b.x;
}
};
优先队列
头文件:#include<queue>
创建:priority_queue<int> q;
入队(push): q.push(x);
出队(pop) : q.pop();
队列为空: q.empty();
队列的长度: q.size();
取队首元素: q.top();//取优先级别最高的元素
*/