借鉴了深入浅出的代码并加以修改
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
int n,n2,a1[1145141],a2[1145141];
unsigned long long sum=0;
void read(int &x){
int f=1;x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
x*=f;
}
int main(){
read(n);
memset(a1,127,sizeof(a1));
memset(a2,127,sizeof(a2));
for(int i=0;i<n;i++){
read(a1[i]);
}
sort(a1,a1+n);
int i=0,j=0,w;
for(int k=1;k<n;k++){
w = (a1[i] < a2[j]) ? a1[i++] : a2[j++];
w += (a1[i] < a2[j]) ? a1[i++] : a2[j++];
a2[n2++]=w;
sum += w;
}
cout << sum;
}