ABC -186 D 题解

300 阅读1分钟

题目链接

atcoder.jp/contests/ab…

题意

求每一个数对的差的绝对值的和

思路

求每一段连线对每一段差分的贡献。(注意因为是求绝对值之差,对数的顺序没要求,并且在求差分的绝对值时,比较好的去绝对值的方法是将数排序).

IMG_0268.PNG

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+100;
typedef long long ll;
int n, a[N];
int main() {
    cin >> n;
    for(int i = 0; i < n; i ++) cin>>a[i];
    sort(a, a + n);
    ll ans = 0;
    for(ll i = 1; i < n; i ++) {
        ans += (i * (n - i)) * (a[i] - a[i - 1]);
    }
    cout << ans;
}