题目:P1325 雷达安装
代码+分析:
#include<bits/stdc++.h>
using namespace std;
long long n,d,x[10005],y[10005];
struct node{
double l,r;
}a[1010];
bool cmp(node A,node B){
return A.r<B.r;
//按右端点从小到大排序
}
int main(){
cin>>n>>d;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i];
if(y[i]>d){
cout<<"-1"<<endl;
return 0;
}//判断无解情况
a[i].l=x[i]-sqrt(d*d-y[i]*y[i]);//勾股定理
a[i].r=x[i]+sqrt(d*d-y[i]*y[i]);//勾股定理
//[l,r]表示当前点的雷达所在位置
}
sort(a+1,a+n+1,cmp);
long long cnt=1,r=a[1].r;
for(int i=2;i<=n;i++){
if(a[i].l<=r) continue;//如果当前岛屿可被覆盖,就不放雷达
r=a[i].r,cnt++;//否则放置一个新的雷达
}
cout<<cnt;
return 0;
}