题目描述:
在一条数轴上有N头牛在不同的位置上,每头牛都计算到其它各头牛的距离。求这n*(n-1)个距离的总和。
数据范围
1<= N <= 10000。每头牛所在位置是一个范围在0到1,000,000,000之内的整数。
输入文件volume.in
第一行:N
后面N行,每行一个整数,表示一头牛所有位置。
输出文件volume.out
一个整数。
样例
输入 |
5 |
(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; }