记录编号 33269 评测结果 AAAAAAAAAA
题目名称 [NOIP 2004]合并果子 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.036 s
提交时间 2011-11-09 22:13:58 内存使用 0.30 MiB
显示代码纯文本
#include <cstdio>
using namespace std;

int top,heap[10001]={0};

void swap(int& a,int& b)
{
	int temp;
	temp=a;
	a=b;
	b=temp;
}

void check(int pos)
{
	int minnum,newpos,temp;
	minnum=heap[pos];
	newpos=pos;
	temp=pos<<1;
	if (temp<=top)
	{
		if (heap[temp]<minnum)
		{
			minnum=heap[temp];
			newpos=temp;
		}
		temp++;
		if (temp<=top)
			if (heap[temp]<minnum)
			{
				minnum=heap[temp];
				newpos=temp;
			}
	}
	if (newpos==pos)
		return;
	else
	{
		swap(heap[pos],heap[newpos]);
		if (newpos<=(top>>1))
			check(newpos);
	}
}

int main(void)
{
	freopen("fruit.in","r",stdin);
	freopen("fruit.out","w",stdout);
	int i,n,total=0;
	scanf("%d\n",&n);
	top=n;
	for (i=1;i<=n;i++)
		scanf("%d",&heap[i]);
	for (i=(top>>1);i>=1;i--)
		check(i);
	while (top>1)
	{
		swap(heap[top--],heap[1]);
		check(1);
		heap[1]+=heap[top+1];
		total+=heap[1];
		check(1);
	}
	printf("%d\n",total);
	fclose(stdin);
	fclose(stdout);
	return(0);
}