思路
排序,然后根据A=B+C 找到A的起始下标和终止下标,就能求出数对的个数
//upper_bound(begin,end,val)寻找val元素的最后一个位置(也就是下一个元素的坐标)
//lower_bound(begin,end,val)寻找val元素的第一个位置(从0开始)
源码
#include<bits/stdc++.h>
using namespace std;
int n,c;
long long a[200005];
int main(){
cin>>n>>c;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
long tot=0;
for(int i=0;i<n;i++){
//upper_bound(begin,end,val)寻找val元素的最后一个位置(也就是下一个元素的坐标)
//lower_bound(begin,end,val)寻找val元素的第一个位置(从0开始)
tot+=upper_bound(a,a+n,a[i]+c)-lower_bound(a,a+n,a[i]+c);
}
cout<<tot<<endl;
return 0;
}
源码
#include<bits/stdc++.h>
using namespace std;
int n,c;
long long a[200005];
int main(){
cin>>n>>c;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
long tot=0;
for(int i=0;i<n;i++){
//upper_bound(begin,end,val)寻找val元素的最后一个位置(也就是下一个元素的坐标)
//lower_bound(begin,end,val)寻找val元素的第一个位置(从0开始)
tot+=upper_bound(a,a+n,a[i]+c)-lower_bound(a,a+n,a[i]+c);
}
cout<<tot<<endl;
return 0;
}