再考虑 -\min(A_i,A_j)。因为每两个数之间一定会匹配一次,所以第 i 小的数会贡献出 -A_i \times (n-i)。
所以我们只需要先计算一遍所有 A_j 的贡献,再排一遍序,在计算一下所有第 i 小的贡献就可以通过这道题啦!
Code
#include<bits/stdc++.h>
using namespace std;
long long n,ans,a[400010];
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],ans+=a[i]*(i-1);
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)ans-=a[i]*(n-i);
cout<<ans;
return 0;
}