为什么只有10分啊:((((
查看原帖
为什么只有10分啊:((((
897118
xmkxk楼主2023/8/19 17:32

看不出问题呀

#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;
}
2023/8/19 17:32
加载中...