全部不通过

P1102 A-B 数对

@[mxdyeah](/user/822713) 题目没有保证输入的 a 数组是有序的,比如 a 可以是 3,2,1,1,所以代码里需要对 a 进行排序。 最后的 t 可能很大,比如 C=1,a 是 $10^5$ 个 1 和 $10^5$ 个 2,那 t 就是 $10^{10}$,用 `int` 类型是存不下的。
by 阿丑 @ 2023-05-13 10:43:18


@[阿丑](/user/364963) 能否具体说下?给出代码就更好了
by mxdyeah @ 2023-05-13 19:32:35


@[mxdyeah](/user/822713) 输入完 a 后写一个 `sort(a+1, a+n+1)`,作用是将 a 数组从小到大排序。 `int t` 改成 `long long t`,输出部分也要改,作用是增大 t 的存储上限。
by 阿丑 @ 2023-05-13 20:01:40


@[阿丑](/user/364963) 十分感谢,问题已经解决了!
by mxdyeah @ 2023-05-20 09:41:54


问题得到解决!代码如下,供大家参考! ```cpp #include<bits/stdtr1c++.h> using namespace std; long long m,t,n,i,l,r,mid,w,q,a[5000000]; int main(){ cin>>n>>m; for(i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+1+n); for(i=1;i<=n;i++) { l=i+1; r=n; while(l<=r) { mid=(l+r)/2; if(a[i]+m<=a[mid]) { r=mid-1; } else { l=mid+1; } } w=l; l=i+1; r=n; while(l<=r) { mid=(l+r)/2; if(a[i]+m<a[mid]) { r=mid-1; } else { l=mid+1; } } q=l; t+=q-w; } cout<<t; return 0; } ```
by mxdyeah @ 2023-05-20 09:46:51


|