A5704简单的合并果子——题解
2024-08-20 10:11:47
发布于:浙江
2阅读
0回复
0点赞
这道题只需要把最小的两个果堆加起来就可以了,好多大佬都用的是优先队列,但由于本人太菜,只好用数组做。
如果这样想,那么每合并一次都需要排一次序,但事实上并不需要这么做(而且这样会超时,我之前用sort函数排就过了四个点,后面全都tle了),只需要给新合并的果堆找到所在的位置,并且将空的果堆删除就可以了。
下面AC代码。
双倍经验:题库合并果子
#include <bits/stdc++.h>
using namespace std;
#define int long long
priority_queue<int,vector<int>,greater<int> > Q;
int a[100005];
int sum;
signed main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
Q.push(a[i]);
}
while(Q.size()!=1){
int x=Q.top();Q.pop();
int y=Q.top();Q.pop();
sum+=x+y;
Q.push(x+y);
}
cout<<sum;
return 0;
}
这里空空如也
有帮助,赞一个