这道题目写了比较久,所以代码有点丑。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int a[10001],len;
void insert(int x){
a[++len]=x;
int k=len,tmp;
while(k>1 && a[k/2]>a[k]){
tmp=a[k/2];a[k/2]=a[k];a[k]=tmp;
k/=2;
}
}
int main(){
int n,m,j,k,i,t;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&k);
insert(k);
}
int sum,ans=0;
for(i=1;i<n;i++){
sum=a[1];
a[1]=a[len--];
k=1;
while((k*2<=len && a[k]>a[k*2]) || (k*2+1<=len && a[k]>a[k*2+1])){
m=k*2;
if(m+1<=len && a[m]>a[m+1])
m++;
t=a[m];a[m]=a[k];a[k]=t;
k=m;
}
sum+=a[1];
a[1]=a[len--];
k=1;
while((k*2<=len && a[k]>a[k*2]) || (k*2+1<=len && a[k]>a[k*2+1])){
m=k*2;
if(m+1<=len && a[m]>a[m+1])
m++;
t=a[m];a[m]=a[k];a[k]=t;
k=m;
}
ans+=sum;
a[++len]=sum;
int tmp;
k=len;
while(k>1 && a[k/2]>a[k]){
tmp=a[k/2];a[k/2]=a[k];a[k]=tmp;
k/=2;
}
}
printf("%d\n",ans);
return 0;
}