- lizexuan's blog
【04NOIP提高组】合并果子
- 2023-7-16 15:15:29 @
题目:
题目解析
看注释
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
long long n, m, tot = 0, a, b;
priority_queue<int, vector<int>, greater<int>> pq; // 本题用优先队列做
cin >> n; // 输入
for (int i = 1; i <= n; i++) {
cin >> m;
pq.push(m); // 将每个过的重量插入pq中
}
int size = pq.size(); // 获取长度
if (size == 1) { // 特判
cout << pq.top() << endl;
return 0;
}
while (size > 1) { // 重复循环直到仅有一个元素
a = pq.top(); // 获取最轻的一个
pq.pop(); // 出
b = pq.top(); // 获取次轻的
pq.pop(); // 出
pq.push(a + b); // 将合并后的插回去并维护
tot += a + b; // 获取重量
size = pq.size(); // 更新长度
}
cout << tot << endl; // 输出总重量
return 0;
}