可以参考亿下题解,然后自己做,@[luck2012](/user/773903)
by safdsfdeaf @ 2024-03-18 20:59:56
```cpp
#include<bits/stdc++.h>
using namespace std;
long long n,c,a[20000],sum=0;
int main(){
cin>>n>>c;
for(long long i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(long long i=1;i<n;i++)
sum+=upper_bound(a+1,a+n+1,a[i]+c)-lower_bound(a+1,a+n+1,a[i]+c);
/*
这个tj的做法就是查找a[i]+c
如果存在a[i]+c
那么肯定两者之差是c
upper_bound就是a[i]+c最后一个出现的位置
lower_bound就是a[i]+c第一次出现的位置
两者相减就是a[i]+c的个数(因为前文已经排序,所以每个相同的数是在一起的)
如果未查询到,两者返回都是n+1,不影响答案(毕竟n+1-n-1=0awa)
懂了吗?
*/
cout<<sum;
return 0;
}
```
@[lucy2012](/user/1252442)
by z_z_b_ @ 2024-03-18 21:03:28
还有,你这解法有问题呀!
2e5是2后面5个0awa
```cpp
#include<bits/stdc++.h>
using namespace std;
long long n,c,a[200020],sum=0;//a数组开小了
int main(){
cin>>n>>c;
for(long long i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(long long i=1;i<n;i++)
sum+=upper_bound(a+1,a+n+1,a[i]+c)-lower_bound(a+1,a+n+1,a[i]+c);
/*
这个tj的做法就是查找a[i]+c
如果存在a[i]+c
那么肯定两者之差是c
upper_bound就是a[i]+c最后一个出现的位置
lower_bound就是a[i]+c第一次出现的位置
两者相减就是a[i]+c的个数(因为前文已经排序,所以每个相同的数是在一起的)
如果未查询到,两者返回都是n+1,不影响答案(毕竟n+1-n-1=0awa)
懂了吗?
*/
cout<<sum;
return 0;
}
```
@[lucy2012](/user/1252442)
by z_z_b_ @ 2024-03-18 21:05:45
@[z_z_b_](/user/956129) 额,拿错代码了,懂了,谢谢!
by lucy2012 @ 2024-03-18 21:10:51