记录编号 |
33269 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2004]合并果子 |
最终得分 |
100 |
用户昵称 |
Truth.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);
}