社区讨论

求助!!!

P1090[NOIP 2004 提高组] 合并果子参与者 3已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@lzuogoa9
此快照首次捕获于
2024/08/15 10:45
2 年前
此快照最后确认于
2024/08/15 13:54
2 年前
查看原帖
样例都过了,但是只有十分!!!
CPP
#include<bits/stdc++.h>
using namespace std;
int n,dui[100005],x;
long long s;
void down(int a) {
	int t;
	while(a*2<=x) {
		if(a*2+1<=x){
			t=dui[a*2]<dui[a*2+1]?a*2:a*2+1;
		}else{
			t=a*2;
		}
		if(dui[a]<dui[t]) break;
		else{
			swap(dui[a],dui[t]);
			a=t;
		}
	}
}
void shanchu(int a) {
	dui[a]=dui[x--];
	down(a);
}
void charu(int a) {
	dui[++x]=a;
	down(x);
}
int main() {
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>dui[i];
		down(i);
	}
	x=n;
	while(x>1) {
		int a=dui[1];
		shanchu(1);
		int b=dui[1];
		shanchu(1);
		s+=a+b;
		charu(a+b);
	}
	cout<<s;
	return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...