← 返回题目页

P1102 A-B 数对

标程

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, c;
    cin >> n >> c;
    vector<int> a(n);
    for (int &x : a) cin >> x;
    sort(a.begin(), a.end());

    long long ans = 0;
    int l = 0, r = 0;
    while (l < n) {
        int target = a[l] + c;
        while (r < n && a[r] < target) r++;
        if (r < n && a[r] == target) {
            int vl = a[l], vr = a[r];
            long long cl = 0, cr = 0;
            while (l < n && a[l] == vl) { cl++; l++; }
            while (r < n && a[r] == vr) { cr++; r++; }
            ans += cl * cr;
        } else {
            int vl = a[l];
            while (l < n && a[l] == vl) l++;
        }
    }

    cout << ans << "\n";
    return 0;
}

动画演示