急解编程

原问题:急解编程
分类:编程开发 > 最后更新时间:【2017-07-30 17:15:04】
问题补充:

题目描述

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

数据范围

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

输入文件

第一行:N

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

输出文件

一个整数。

输入样例

515324

输出样例

40

样例说明

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

上面的很容易,可n开到1000000简直要我命呀;。

哪位可以帮帮我;

最佳答案

这个是2009南海区集训队初中选拔题,网上搜一堆的,以下是其中之一

#include <iostream>
#include <cstdio>
#include <algorithm>
#define LL long long

using namespace std;

const int MAXN = 1e4+10;

int n;
LL a[MAXN];
LL dis[MAXN];
LL ans = 0;

int main()
{
//freopen("F:\\rush.txt","r",stdin);
cin >> n;
for (int i = 1;i <= n;i++)
cin >> a[i];
sort(a+1,a+1+n);
dis[1] = 0;dis[2] = a[2]-a[1];
for (int i = 3;i <= n;i++)
{
dis[i] = dis[i-1]+(i-2)*(a[i]-a[i-1]);
dis[i]+=a[i]-a[i-1];
}
for (int i = 1;i <= n;i++)
ans+=dis[i];
cout << ans*2<<endl;
return 0;
}

最佳答案由网友  whoami1978  提供
公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
13

分享到:

其他回答

暂无其它回答!

    推荐