题目描述:

  在一条数轴上有N头牛在不同的位置上,每头牛都计算到其它各头牛的距离。求这n*(n-1)个距离的总和。

数据范围

  1<= N <= 10000。每头牛所在位置是一个范围在0到1,000,000,000之内的整数。

输入文件volume.in

 第一行:N

 后面N行,每行一个整数,表示一头牛所有位置。

输出文件volume.out

 一个整数。

样例

输入

5
1
5
3
2
4   


说明:

(1+2+3+4)+(4+3+2+1)

+(2+1+1+2)+(1+1+2+3)

+(3+2+1+1) = 40

输出

40

 

 

#include<fstream>
#include<cstdlib>
using namespace std;
ifstream cin("volume.in");
ofstream cout("volume.out");
long long n;
long long a[1000000];
long long ans,f[1000000];
int cmp(const void *a,const void *b)
{
    return *(long long *)a-*(long long *)b;
}
int main()
{
    cin>>n;
    long long i;
    for (i=1;i<=n;i++) 
    {
        cin>>a[i];
    }
    qsort(a+1,n,sizeof(long long),cmp);
    for (i=2;i<=n;i++)
    {
        f[i]=f[i-1]+((a[i]-a[i-1])*(i-1));
    }
    for (i=1;i<=n;i++) ans+=f[i];
    cout<<ans*2;
    //system("pause");
    return 0;
}