Codeforces - Match Points

蓝咒 提交于 2020-02-22 20:45:38

题目链接: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;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!