题目可以简化为:给你一个序列,求任意两个数的差的绝对值的和
我们考虑每两个数的差用了几次比如:1 2 5 8
5-2=3
1–5 1次
1–8 1次
2–5 1次
5–8 1次
一共4次
发现次数=位置*(n-位置)
1 2 5 8
2和5,8配对
1又和5,8配对
2*2=4
#include<bits/stdc++.h>
using namespace std;
inline long long read()//快读
{
long long f=1,res=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){res=(res<<1)+(res<<3)+(ch&15);ch=getchar();}
return res*f;
}
unsigned long long ans;
long long n,a[1000010];
int main()
{
n=read();
for(int i=1;i<=n;i++)a[i]=read();
sort(a+1,a+1+n);
for(int i=1;i<n;i++)
ans+=(a[i+1]-a[i])*i*(n-i);//找每个差值用了几次
cout<<ans;
return 0;
}