解析:
可以从岛屿进行分析,对于任意的岛屿我们都可以在海岸线上求出能覆盖该岛屿的建造雷达的区间 [a,b]
借yxc大佬图
那么对应a的坐标为(x-len) b的坐标为(x+len) len可以勾股定理求出。
把所有的区间求出来后,我们按照右端点从小到大排序。问题就转化为区间选点问题
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int N=1e5+1000;
typedef pair<double,double> PDD;
PDD q[N];
int n,d;
double esp=1e-6;
bool succesful;
bool cmp(PDD a,PDD b)
{
return a.y<b.y;
}
int main()
{
cin>>n>>d;
succesful=true;
for(int i=1;i<=n;i++)
{
double x,y;
cin>>x>>y;
if(y>d) succesful=false;
double len=sqrt(d*d-y*y);
q[i]={x-len,x+len};
}
if(!succesful) cout<<-1<<endl;
else
{
sort(q+1,q+1+n,cmp);
double last=-1e10;
int res=0;
for(int i=1;i<=n;i++)
{
if(q[i].x>last+esp)
{
last=q[i].y;
res++;
}
}
cout<<res<<endl;
}
}