记录编号 |
387911 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2004]合并果子 |
最终得分 |
100 |
用户昵称 |
Go灬Fire |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.009 s |
提交时间 |
2017-03-27 20:28:46 |
内存使用 |
0.37 MiB |
显示代码纯文本
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
const int maxn=15000;
int a[maxn];
struct Heap{
int size;
Heap(){size=0;}
inline bool empty(){return !size;}
inline void clear(){size=0;}
inline int top(){return a[1];}
inline void down(register int x){
register int son;
for(son=x<<1;son<=size;x=son,son<<=1){
if(son<size) if(a[son|1]<a[son]) son|=1;
if(a[son]<a[x]) swap(a[son],a[x]);
else break;
}
}
inline void up(register int x){
register int fa;
for(fa=x>>1;fa;x=fa,fa>>=1){
if(a[x]<a[fa])swap(a[fa],a[x]);
else break;
}
}
inline void pop(){
swap(a[1],a[size--]);
down(1);
}
inline void push(int temp){
a[++size]=temp;
up(size);
}
}q;
int n;
inline void Read(register int & x){
register bool f=0;register char ch;
while(ch=getchar(),ch<'0' || ch>'9') if(ch=='-') f=1;
x=ch-48;
while(ch=getchar(),ch>='0' && ch<='9') x=x*10+ch-48;
if(f) x=-x;
}
void Init();
int main(){
freopen("fruit.in","r",stdin);freopen("fruit.out","w",stdout);
Init();
return 0;
}
void Init(){
scanf("%d",&n);
register int i,ans=0,x,y;
for(i=1;i<=n;i++){
Read(x);
q.push(x);
}
while(!q.empty()){
x=q.top();q.pop();ans+=x;
if(q.empty())break;
y=q.top();q.pop();ans+=y;
if(q.empty())break;
q.push(x+y);
}
printf("%d\n",ans);
}