> 文档中心 > 洛谷_P1325 雷达安装

洛谷_P1325 雷达安装

题目描述
描述:
假设海岸线是一条无限延伸的直线。它的一侧是陆地,另一侧是海洋。每一座小岛是在海面上的一个点。雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d。你的任务是建立尽量少的雷达站,使所有小岛都在扫描范围之内。

数据使用笛卡尔坐标系,定义海岸线为x轴。在x轴上方为海洋,下方为陆地。

样例1如图所示:
在这里插入图片描述
输入格式
第一行包括2个整数n和d,n是岛屿数目,d是雷达扫描范围。

接下来n行为岛屿坐标。

输出格式
一个整数表示最少需要的雷达数目,若不可能覆盖所有岛屿,输出“-1”。

输入输出样例

输入 #1

3 21 2-3 12 1

输出 #1

2

说明/提示
数据范围

n≤1000,d≤20000

洛谷_P1325 雷达安装

code

#includeusing namespace std;const int MAXN=1010;struct Point {double l,r;}a[MAXN];bool cmp(Point aa,Point bb){return aa.r<bb.r;}int main(){int n,d,ans=1;//如题,ans=1为第一个雷达scanf("%d%d",&n,&d);for(int i=1;i<=n;i++){int x,y;scanf("%d%d",&x,&y);if(y>d){//无法满足printf("-1");return 0;//直接返回}int dis=sqrt(d*d-y*y);//见上a[i].l=x-dis;a[i].r=x+dis;}sort(a+1,a+n+1,cmp);//排序double now=a[1].r;for(int i=2;i<=n;i++)if(now<a[i].l){//如果不够,操作now=a[i].r;ans++;}printf("%d",ans);//输出return 0;}

在这里插入图片描述

天天赞天天看!!!我们明天再见,拜拜!

松山湖网站