记录编号 356833 评测结果 AAAAAAAAAA
题目名称 [NOIP 2004]合并果子 最终得分 100
用户昵称 Gravatar蓝T-shirt 是否通过 通过
代码语言 C++ 运行时间 0.038 s
提交时间 2016-12-06 20:06:12 内存使用 0.39 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <fstream>
#include <cstring>
using namespace std;
int n;
const int maxn=10000+10;
long long dui[maxn],ans=0;
int my_long=0;
void my_ins(long long data);
long long my_del();
int main(){
	freopen("fruit.in","r",stdin);
	freopen("fruit.out","w",stdout);
	cin>>n;
	for(int i=0;i<n;i++)
	{
		long long x;
		cin>>x;
		my_ins(x);
	}
	for(int i=0;i<n-1;i++)
	{
		long long x,y;
		x=my_del();
		y=my_del();
		ans=ans+x+y;
		my_ins(x+y);
	}
	cout<<ans<<endl;
	return 0;
}
void my_ins(long long data)
{
	dui[++my_long]=data;
	int next=my_long;
	for(;my_long>1;)
	{
		int f=next/2;
		if(dui[f]>dui[next])
			swap(dui[f],dui[next]);
			else
				break;
			next=f;
	}
}
long long my_del(){
	long long t=dui[1];
	dui[1]=dui[my_long--];
	for(int next=1;;){
		int left=next*2,p=left;
		if(left>my_long) break;
		int right=left+1;
		if(right<=my_long)
			if(dui[right]<dui[left])
				p=right;
			if(dui[next]>dui[p])
				swap(dui[next],dui[p]);
			next=p;
	}
return t;
}