社区讨论

为什么只有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 条回复,欢迎继续交流。

正在加载回复...