题目要求我们找到所有满足条件 $A - B = C$ 的数对的数量。这里的关键点在于如何高效地查找这些数对。
读取输入:
排序:
二分查找:
计数符合条件的数对:
输出结果:
以下是按照上述步骤编写的完整C++代码:
#include<bits/stdc++.h>
using namespace std;
int a[200000];
long long ans;
int main(){
int n, c;
cin >> n >> c;
for(int i = 0; i < n; i++){
cin >> a[i];
}
sort(a, a + n);
for(int i = 0; i < n; i++){
int x = a[i] - c;
int l = -1, r = n;
while(l + 1 < r){
int mid = (l + r) / 2;
if(a[mid] > x){
r = mid;
}else{
l = mid;
}
}
if(a[l] != x){
continue;
}
int last = l;
l = -1, r = n;
while(l + 1 < r){
int mid = (l + r) / 2;
if(a[mid] < x){
l = mid;
}else{
r = mid;
}
}
ans += (last - r + 1);
}
cout << ans;
return 0;
}