10. 雷达安置 最难搞的90分(已解决)

#include<bits/stdc++.h>
using namespace std;
int n,d;
struct point{
	int l,r;
}a[1010]; 
bool cmp(point a,point b){
	return a.r<b.r;
}
int main(){
	cin>>n>>d;
	for(int i=0;i<n;i++){
		int sx,sy;
		cin>>sx>>sy;
		if(sy>d){
			cout<<"-1";
			return 0;
		}
		a[i].l=sx-sqrt(d*d-sy*sy);
		a[i].r=sx+sqrt(d*d-sy*sy);
	} 
	sort(a,a+n,cmp);
	int ans=1;
	int k=a[0].r;
	for(int i=1;i<n;i++){
		if(a[i].l>k){
			ans++;
			k=a[i].r;
		}
	}
	cout<<ans;
	return 0;
}

1 个赞

@杨瑞 你甚至可以:

	if(n==638 and d==54){
	    cout<<"184";
	    return 0;
	}

666 你太有实力了。
(我以前这么干过,被老师制裁了)

1 个赞