PKU 2231 - Moo Volume (计算贡献)

题意

计算出每个点到其他点的距离。

思路

和CF上有一题一样。一般的方法是$O(n^2)$的。

sort一下,计算出每个点对答案的贡献。

对于第i个点,贡献了$i-1$个正,$n-i$个负。

因为是双向的,所以最后结果要乘以2.

代码

LL arr[MAXN];
int main()
{
    //ROP;
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) scanf("%lld", &arr[i]);
    sort(arr+1, arr+n+1);
    LL sum = 0;
    for (int i = 1; i <= n; i++)
        sum += (2*i-1-n) * arr[i];
    printf("%lld\n", sum<<1);
    return 0;
}

Powered by Jekyll and Theme by solid