#include<stdio.h> #include<stdlib.h> void Insert(int *a,int len,int Count) { int i,small,count; count = Count; a[count] = len; while(count != 0) { i = (count-1)/2; if(a[count] < a[i]) { small = a[count]; a[count] = a[i]; a[i] = small; count = i; } else break; } } int Deletemin(int *a,int Count) { int count = Count; int i = 0,bigger,j,k,t; t = a[0]; a[0] = a[count --]; while(i != count) { j = 2 * i + 1; if(j < count) { if(a[i] < a[j]&&a[i]<a[j+1]) i = count; else if(a[j + 1] <= a[j] && a[j+1] < a[i]) { bigger = a[i]; a[i] = a[j + 1]; a[j + 1] = bigger; i = j + 1; } else if(a[j] < a[j+1]&&a[j] < a[i]) { bigger = a[i]; a[i] = a[j]; a[j] = bigger; i = j; } } else if(j > count) { i = count; } else { if(a[i] > a[j]) { bigger = a[i]; a[i] = a[j]; a[j] = bigger; i = j; } else i = count; } } return t; } int main(void) { int N,l,i = 0,count = 0; long long S = 0,sum = 0; int len[20010]; scanf("%d",&N); while(count < N) { scanf("%d",&l); Insert(len,l,count); count ++; S += l; } count --; while(count > 1) { sum = Deletemin(len,count); count --; sum += Deletemin(len,count); Insert(len,sum,count); S += sum; } printf("%lld\n",S); return 0; } |
Double click to view unformatted code.