#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; } // printf("sum is ok1\n"); } 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; //printf("%d %d\n",a[j],a[j+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; } //printf("i == %d count = %d\n",i,count); } //printf("sum is ok3\n"); return t; } int main(void) { int N,sum = 0,l,i = 0,count = 0,S = 0; int t1,t2,T; int len[20000]; scanf("%d",&N); while(count < N) { scanf("%d",&l); Insert(len,l,count); count ++; sum += l; } count --; // for(i = 0;i <= count;i ++) // printf("len[%d] = %d ",i,len[i]); // printf("N = %d,count = %d\n",N,count); // for(i = 0;i <= count;i ++) // printf("%d ",len[i]); // printf("sum = %d\n",sum); S += sum; // printf("S = %d\n",S); while(count > 1) { t1 = Deletemin(len,count); count --; t2 = Deletemin(len,count); count --; // printf("%d %d\n",t1,t2); sum = t1+t2; // printf("sum = %d\n",sum); count++; Insert(len,sum,count); S += sum; //printf("sum is ok2\n"); //for(i = 0;i <= count;i ++) // printf("len[%d] = %d ",i,len[i]); } printf("%d\n",S); return 0; } |
Double click to view unformatted code.