题目: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;
}