这题写一堆if判断这块布是否要重新染色,值得注意的是要用read函数输入,否则会TLE
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a[1000005],ans;
queue<ll>q1,q2;
inline ll read()
{
char c=getchar();
ll t=0;
while(c>'9'||c<'0')c=getchar();
while(c>='0'&&c<='9')
{
t=t*10+c-'0';
c=getchar();
}
return t;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
a[i]=read();
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
q1.push(a[i]);
for(int i=1;i<n;i++)
{
ll v1,v2;
if(q1.empty())
{
v1=q2.front();
q2.pop();
}
else if(q2.empty())
{
v1=q1.front();
q1.pop();
}
else
{
if(q1.front()<q2.front())
{
v1=q1.front();
q1.pop();
}
else
{
v1=q2.front();
q2.pop();
}
}
if(q1.empty())
{
v2=q2.front();
q2.pop();
}
else if(q2.empty())
{
v2=q1.front();
q1.pop();
}
else
{
if(q1.front()<q2.front())
{
v2=q1.front();
q1.pop();
}
else
{
v2=q2.front();
q2.pop();
}
}
q2.push(v1+v2);
ans+=v1+v2;
}
printf("%lld\n",ans);
return 0;
}
来源:zr