求助,只对第一个点
查看原帖
求助,只对第一个点
322705
Mr_Ender楼主2020/8/4 12:33
#include<bits/stdc++.h>
using namespace std;
int n,fruit[100005],x,y,sum=0;
void siftdown(int x){
	int t=x;
	if(x*2+1<=n){
		if(fruit[x*2+1]<fruit[x]){
			if(fruit[x*2]<fruit[x*2+1]){
				swap(fruit[x],fruit[x*2]);
				t=x*2;
			}
			else{
				swap(fruit[x],fruit[x*2+1]);
				t=x*2+1;
			}
		}
	}
	else{
		if(x*2<=n){
			if(fruit[x*2]<fruit[x]){
				swap(fruit[x],fruit[x*2]);
				t=x*2;
			}
		}
	}
	if(x!=t){
		siftdown(t);
	}
	return;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>fruit[i];
	}
	sort(fruit+1,fruit+n+1);
	while(n>1){
		x=fruit[1];
		fruit[1]=fruit[n];
		n--;
		siftdown(1);
		y=fruit[1];
		sum+=x+y;
		fruit[1]=x+y;
		siftdown(1);
	    cout<<endl;
	}
	cout<<sum;
    return 0;
}
2020/8/4 12:33
加载中...