#include<bits/stdc++.h>
using namespace std;
long long q[1000005],p[1000005];
int m[1000005];
int n,a,cnt1,cnt2,top1,top2;
long long ans;
long long read()
{
long long x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
ch=getchar();
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return x*f;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
{
a=read();
m[a]++;
}
for(int i=1;i<=1000000;i++)
if(m[i])
for(int j=1;j<=m[i];j++)
q[++cnt1]=i;
top1=top2=1;
for(int i=1;i<=n-1;i++)
{
if(q[top1]==0)
q[top1]=LONG_LONG_MAX;
if(q[top1+1]==0)
q[top1+1]=LONG_LONG_MAX;
if(p[top2]==0)
p[top2]=LONG_LONG_MAX;
if(p[top2+1]==0)
p[top2+1]=LONG_LONG_MAX;
if(p[top2+1]<q[top1])
p[++cnt2]=p[top2]+p[top2+1],ans+=p[cnt2],top2+=2;
else if(p[top2]<q[top1+1])
p[++cnt2]=p[top2]+q[top1],ans+=p[cnt2],top1++,top2++;
else
p[++cnt2]=q[top1]+q[top1+1],ans+=p[cnt2],top1+=2;
}
printf("%lld\n",ans);
return 0;
}
用scanf差一点点就过了,加了快读就成了RE
求助