您的位置:首页 > 编程语言 > C语言/C++

poj3253解题报告c语言

2015-08-12 16:25 309 查看
#include <stdio.h>
#define INF 50001
__int64 heap[INF],arr[INF], size = 0;
void push(__int64 x){
__int64 i = size++;
while(i > 0){
__int64 j = (i - 1) / 2;
if(heap[j] <= x) break;
heap[i] = heap[j];
i = j;
}
heap[i] = x;
}
__int64 pop(){
__int64 res = heap[0], temp = heap[--size];
__int64 i = 0;
while(i * 2 + 1 < size){
__int64 j = i * 2 + 1;
if(j + 1 < size && heap[j + 1] < heap[j]) j++;
if(heap[j] >= temp) break;
heap[i] = heap[j];
i = j;
}
heap[i] = temp;
return res;
}
int main(){
__int64 x,i,m,a,b;
__int64 temp,num=0;
scanf("%I64d",&m);
for(i=0;i<m;i++)
{
scanf("%I64d", &x);
push(x);
}
while(m!=1)
{
m--;
a=pop();
b=pop();
if(m!=1)
push(a+b);
num=num+a+b;
}
printf("%I64d",num);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: