大牛的距离(笑cry)精简算法
在一条数轴上有N头牛在不同的位置上,每头牛都计算到其它各头牛的距离。求这n*(n-1)个距离的总和。1<= N <= 10000。每头牛所在位置是一个范围在0到1,000,000,000之内的整数。
/*********************************************************************************\
此题坑在取值上,10000个数,超过了二次循环的范围,但这里的二次循环是指从一开始的循环,所以思路如下
输入数组之后,对数组进行排序
例:
1 2 3 6 9
1:1-1 2-1
3-1 6-1
9-1
2:2-1 2-2
3-2 6-2
9-2
3:3-1 3-2 3-3 6-3
9-3
6:6-1 6-2
6-3 6-6
9-6
9:9-1 9-2
9-3 9-6
9-9
注意,排过序后,再次计算距离就会有0之后的数(即红字之后的数)这些数在下面一定有对应的数,这些数无需再次计算,乘二即可。
所以二次循环可用
代码实现如下:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
long long m,n,p,q,a[26666],sum=0;
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i];
}
sort(a+1,a+m+1);
for(int i=1;i<=m;i++)
{
for(int j=i;j<=m;j++)
{
p=a[i]-a[j];
p=p*-1;
sum=sum+p;
}
}
cout<<sum*2<<endl;
}
posted on 2016-06-23 13:54 supersumax 阅读(157) 评论(0) 编辑 收藏 举报