题意就是计算任意两个牛之间的距离总和,暴力的话是会超时的.
所以,优化呢。。。没找到方法,无奈了,看了下题解,各种找规律啊,我去,我可是一点规律没发现啊,一组样例就可以,找规律这方面能力还是太弱啊
<span style="font-size:14px;">/*
POJ2231 Moo Volume
完全各种规律啊,好吊的样子,我找规律的能力有待提升啊,
其实也不是那么难找,毕竟高中的数学训练底子还是有点的
看样例(提前排序)
0~5 对应的是1 2 3 4 5
然后 a[i] 到 a[j] 的距离,我们可以只计算单向的距离,然后加和以后再乘以2
那么总和就是2*sum
sum+=(n-i-1)*(a[n-i-1]-a[i])
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long a[10005];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
scanf("%lld",&a[i]);
sort(a,a+n);
long long sum=0;
for(int i=0;i<n;i++)
{
sum+=(n-i-1)*(a[n-i-1]-a[i]);
}
printf("%lld\n",sum*2);
return 0;
}
</span>