记录编号 |
378656 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2004]合并果子 |
最终得分 |
100 |
用户昵称 |
+1s |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.033 s |
提交时间 |
2017-03-04 15:19:34 |
内存使用 |
0.35 MiB |
显示代码纯文本
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("fruit.in");
ofstream fout("fruit.out");
int n,a[10005],t;
const int OO=66666666;
void inte(int dat)
{
a[++n]=dat;
int t=dat;
for(int i=n;;)
{
if(i==1)
{
a[i]=t;
break;
}
if(t<a[i/2])
{
a[i]=a[i/2];
i/=2;
}
else
{
a[i]=t;
break;
}
}
}
void swap(int *a,int *b)
{
int t=*a;
*a=*b;
*b=t;
}
void remo()
{
a[1]=a[n];
a[n]=OO;
n--;
for(int i=1;;)
{
int j;
if(i*2>n)
{
break;
}
if(a[i*2]<a[i*2+1])
{
j=i*2;
}
else
{
j=i*2+1;
}
if(a[j]==OO)break;
if(a[i]>a[j])
{
swap(a[i],a[j]);
i=j;
}
else
break;
}
}
int main()
{
for(int i=0;i<10005;i++) a[i]=OO;
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>a[i];
}
sort(a+1,a+1+n);
for(;n!=1;)
{
int o=a[1];
remo();
o+=a[1];
remo();
inte(o);
t+=o;
}
fout<<t<<endl;
return 0;
}