题目链接:Codeforces - Match Points
首先考虑二分答案。
怎么check呢?肯定是最小的mid个和最大的mid个匹配。
然后就做完了。
AC代码:
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int N=2e5+10;
int n,z,x[N];
inline int check(int mid){
for(int i=1;i<=mid;i++) if(x[n-mid+i]-x[i]<z) return 0;
return 1;
}
signed main(){
cin>>n>>z;
for(int i=1;i<=n;i++) scanf("%d",&x[i]);
sort(x+1,x+1+n); int l=0,r=n/2;
while(l<r){
int mid=l+r+1>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}
来源:CSDN
作者:青烟绕指柔!
链接:https://blog.csdn.net/weixin_43826249/article/details/104446492