我发现了排位赛第6题
2024-07-15 10:14:01
发布于:广东
10阅读
0回复
0点赞
#include <iostream>
#include <cstdio>
#include <vector>
//#include <queue>
using namespace std;
struct priority_queue{
vector <int> __data;
void push(int tmp){
__data.push_back(tmp);
int i = __data.size();
while(i / 2 >= 1 && __data[i - 1] <= __data[i / 2 - 1]){
swap(__data[i - 1], __data[i / 2 - 1]);
i = i / 2;
}
}
int top(){
if(__data.empty()) return -1;
return __data[0];
}
void pop(){
__data[0] = __data.back();
__data.pop_back();
int i = 1;
while(i * 2 <= __data.size()){
int j = i * 2;
if(j < __data.size() && __data[j] < __data[j - 1]) j++;
if(__data[i - 1] <= __data[j - 1]) return;
swap(__data[i - 1], __data[j - 1]);
i = j;
}
}
bool empty(){
return __data.empty();
}
int size(){
return __data.size();
}
};
int read(){
char c = getchar();
int x = 0;
while(!isdigit(c)) c = getchar();
while(isdigit(c)){
x = (x << 3) + (x << 1) + c - '0';
c = getchar();
}
return x;
}
int main(){
priority_queue q;
int n = read(), x;
for(int i = 1; i <= n; i++){
x = read();
q.push(x);
}
long long ct = 0;
while(q.size() > 1){
int tmp1 = q.top();
q.pop();
int tmp2 = q.top();
q.pop();
ct += tmp1 + tmp2;
q.push(tmp1 + tmp2);
}
cout << ct;
return 0;
}
全部评论 1
哥。在吗
2024-07-15 来自 广东
0???
2024-07-15 来自 广东
0
有帮助,赞一个