有点看不懂这个代码,求注释,悬关

P1102 A-B 数对

可以参考亿下题解,然后自己做,@[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


|