洛谷題單指南-集合-P1102 A-B 數對

江城伍月發表於2024-03-21

原題連結:https://www.luogu.com.cn/problem/P1102

題意解讀:前文https://www.cnblogs.com/jcwy/p/18043197介紹了二分和雙指標的做法,本文介紹hash的做法。

解題思路:

定義map<int, int> h,儲存每個數+c出現的個數

同樣,先將所有數由小到大哦排序

遍歷每一個數x,答案累加ans += h[x]

然後把x+c個數累加h[x+c]++

最後輸出答案即可

100分程式碼:

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

const int N = 2e5 + 5;

int a[N], n, c;
map<int, int> h;
long long ans;

int main()
{
    cin >> n >> c;
    for(int i = 1; i <= n; i++) cin >> a[i];
    sort(a + 1, a + n + 1);
    for(int i = 1; i <= n; i++)
    {
        ans += h[a[i]];
        h[a[i] + c]++;
    }
    cout << ans;

    return 0;
}

相關文章