记录编号 |
26852 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2004]合并果子 |
最终得分 |
100 |
用户昵称 |
201101 |
是否通过 |
通过 |
代码语言 |
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);
}