社区讨论
为什么只有10分啊:((((
P1090[NOIP 2004 提高组] 合并果子参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo1ryolm
- 此快照首次捕获于
- 2023/10/23 02:00 2 年前
- 此快照最后确认于
- 2023/11/03 02:38 2 年前
看不出问题呀
CPP#include <stdio.h>
#define re register
int heap[10009],hsize;
void swap(int &a,int &b){
int t=a;a=b;b=t;
}
void put(int x){
heap[++hsize]=x;
int son=hsize,pa=son>>1;
while(son>1){
if(heap[son]>=heap[pa])break;
swap(heap[son],heap[pa]);
son=pa,pa=son>>1;
}
}
int get(){
int pa=1,son=pa<<1,res=heap[1];
heap[1]=heap[hsize--];
while(son<=hsize){
if(heap[pa]<=heap[son])break;
if(heap[son]>heap[son+1]&&son<hsize)son++;
swap(heap[pa],heap[son]);
pa=son,son=pa<<1;
}
return res;
}
//long long ans;
int main(){
int n,ans=0,tmp;
scanf("%d",&n);
for(re int i=1;i<=n;i++){
scanf("%d",&tmp);
put(tmp);
}
while(hsize>1){
int t=get(),tt=get();
ans+=t+tt;
put(t+tt);
}
printf("%d",ans);
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...