1. 程式人生 > 實用技巧 >洛谷-P1102 A-B 數對

洛谷-P1102 A-B 數對

洛谷-P1102 A-B 數對

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


題目描述

出題是一件痛苦的事情!

相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!

好吧,題目是這樣的:給出一串數以及一個數字 \(C\),要求計算出所有 \(A - B = C\) 的數對的個數(不同位置的數字一樣的數對算不同的數對)。

輸入格式

輸入共兩行。

第一行,兩個整數 \(N, C\)

第二行,\(N\) 個整數,作為要求處理的那串數。

輸出格式

一行,表示該串數中包含的滿足 \(A - B = C\) 的數對的個數。

輸入輸出樣例

輸入 #1

4 1
1 1 2 3

輸出 #1

3

說明/提示

對於 \(75\%\) 的資料,\(1 \leq N \leq 2000\)

對於 \(100\%\) 的資料,\(1 \leq N \leq 2 \times 10^5\)

保證所有輸入資料都在 \(32\) 位帶符號整數範圍內。

2017/4/29 新添資料兩組

C++程式碼

#include <cstdio>
#include <map>
using namespace std;

map <long long, long long> m;

int main() {
    long long n, c, ans=0;
    scanf("%lld%lld", &n, &c);
    long long a[n];
    for (int i=0; i<n; ++i)
        scanf("%lld", &a[i]);
    for (int i=0; i<n; ++i) {
        ++m[a[i]];
        a[i] -= c;
    }
    for (int i=0; i<n; ++i)
        ans += m[a[i]];
    printf("%lld\n", ans);
    return 0;
}