@[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