记录编号 26852 评测结果 AAAAAAAAAA
题目名称 [NOIP 2004]合并果子 最终得分 100
用户昵称 Gravatar201101 是否通过 通过
代码语言 C++ 运行时间 0.035 s
提交时间 2011-07-28 12:43:04 内存使用 0.30 MiB
显示代码纯文本
#include <fstream>
using namespace std;

int post,top,a[10001];

void swap(int &x,int &y)
{
	int temp;
	temp=x;
	x=y;
	y=temp;
}

void checkit(int pos)
{
	if (pos/2!=0)
		if (a[pos]<a[pos/2])
		{
			swap(a[pos],a[pos/2]);
			checkit(pos/2);
		}
}

void checkit2(int pos)
{
	if	(pos*2<=top)
		if (pos*2+1<=top&&a[pos*2]>a[pos*2+1])
		{
			a[pos]=a[pos*2+1];
			checkit2(pos*2+1);
		}
		else
		{
			a[pos]=a[pos*2];
			checkit2(pos*2);
		}
	else
		post=pos;
}

int getandcal(void)
{
	int temp;
	temp=a[1];
	checkit2(1);
	a[post]=a[top];
	checkit(post);
	top--;
	temp+=a[1];
	checkit2(1);
	a[post]=a[top];
	checkit(post);
	top--;
	return(temp);
}

int main(void)
{
	ifstream input("fruit.in");
	ofstream output("fruit.out");
	int i,n,temp,c=0;
	input>>n;
	for (i=1;i<=n;i++)
	{
		input>>a[i];
		checkit(i);
	}
	top=i-1;
	for (i=1;i<=n-1;i++)
	{
		temp=getandcal();
		c+=temp;
		top++;
		a[top]=temp;
		checkit(top);
	}
	output<<c<<endl;
	input.close();
	output.close();
	return(0);
}