不会做,请问怎么做?(最好用二分)

神奇的编号对
描述

给出多个乱序排放的编号以及一个数字C,要求计算出所有编号之差等于C的编号对的个数(不同位置的数字一样的数对算不同的数对)。

输入

输入共两行。 第一行,两个整数N(2<=N<=103)和C(0<=C<=106),分别表示要处理的编号数量和编号之差C。 第二行,N个整数,表示N个需要处理的编号。

输出

一行,表示这些编号中包含的满足 A - B = C的编号对的个数。

样例输入

4 1
1 3 1 2
样例输出

3

代码如下:


#include <iostream>
using namespace std;
int main()
{
    int N,C;
    int a[104];
    int cnt = 0;
    cin >> N >> C;
    for(int i = 0;i<N;i++)
        cin >> a[i];
    for(int i = 0;i<N;i++)
    {
        for(int j = i+1;j<N;j++)
        {
            if(a[i] - a[j] == C || a[j]-a[i]==C)
                cnt++;
        }
    }
    cout << cnt <<endl;
    return 0;
}