比赛 test1 评测结果 AAAAAAAAAA
题目名称 合并果子 最终得分 100
用户昵称 HeHe 运行时间 0.040 s
代码语言 C++ 内存使用 0.25 MiB
提交时间 2017-02-28 19:44:44
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
#define is_num(tmp) (tmp<='9'&tmp>='0')
inline int in(){
	char tmp(getchar());
	int res(0);
	while(!is_num(tmp))tmp=getchar();
	while(is_num(tmp))
		res=(res<<1)+(res<<3)+(tmp^48),
		tmp=getchar();
	return res;
}
template<typename T>
class heap{
private:
	T s[12345];
	int en;
public:
	heap():en(0){;}
	void push(const T&num){
		++en;
		s[en]=num;
		int now(en),num_1;
		while(now!=1&&num<s[num_1=now>>1]){
			s[now]=s[num_1];
			s[num_1]=num;
			now=num_1;
		}
		return ;
	}
	T top(){
		return s[1];
	}
	void pop(){
		s[1]=s[en];
		--en;
		T tmp(s[1]);
		int now(1),num_1,num_2;
		while((num_1=now<<1)<=en&&min(s[num_1],s[num_2=num_1|1])<tmp){
			if(s[num_1]<s[num_2]){
				s[now]=s[num_1];
				s[num_1]=tmp;
				now=num_1;
			}
			else{
				s[now]=s[num_2];
				s[num_2]=tmp;
				now=num_2;
			}
		}
		return ;
	}
	int size(){
		return en;
	}
};
heap<int>k;
int n,ans,tmp;
int main(){
	freopen("fruit.in","r",stdin);
	freopen("fruit.out","w",stdout); 
	n=in();
	for(int i=0;i<n;++i)
		k.push(in());
	while(k.size()!=1){
		tmp=k.top();
		k.pop();
		tmp+=k.top();
		k.pop();
		ans+=tmp;
		k.push(tmp);
	}
	printf("%d",ans);
	return 0;
}/*
9
1 9 3 7 6 8 2  4 5
*/