首页 > 代码库 > 2625 雷达安装
2625 雷达安装
2625 雷达安装
时间限制: 1 s
空间限制: 32000 KB
题目等级 : 黄金 Gold
题目描述 Description
假定海岸线是一条无限延伸的直线,陆地在海岸线的一边,大海在另一侧。海中有许多岛屿,每一个小岛我们可以认为是一个点。现在要在海岸线上安装雷达,雷达的覆盖范围是d,也就是说大海中一个小岛能被安装的雷达覆盖,那么它们之间的距离最大为d。
我们使用平面直角坐标系,定义海岸线是x轴,大海在x轴上方,陆地在下方。给你海中每一个岛屿的坐标位置(x,y)和要安装的雷达所覆盖的范围d,你的任务是写一个程序计算出至少安装多少个雷达能将所有的岛屿覆盖。
输入描述 Input Description
第一行两个整数n(1≤n≤100000)和d,分别表示海中岛屿的数目和雷达覆盖的范围半径d。
接下来n行,每行两个整数,表示每个岛屿的坐标位置(x,y)。
输出描述 Output Description
一行一个整数,即能将所有岛屿全部覆盖至少安装的雷达个数,如果无解则输出“-1”。
样例输入 Sample Input
3 2
1 2
-3 1
2 1
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
(1≤n≤100000)
注意会输出-1
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 7 const int N = 100010 ; 8 9 struct node10 {11 double begin,end;12 }lei[N];13 14 double now= -20000000.0;15 int n,m,ans;16 bool flag=true;17 18 bool cmp(node a,node b)19 {20 return a.end<b.end;21 }22 int main()23 {24 scanf("%d%d",&n,&m);25 for(int i=1;i<=n;++i)26 {27 double a,b;28 scanf("%lf%lf",&a,&b);29 if(b>m)flag=false ;30 double c=sqrt(m*m-b*b);31 lei[i].begin=a-c;32 lei[i].end=a+c;33 }34 if(flag==false)35 {36 printf("-1");37 return 0;38 }39 sort(lei+1,lei+n+1,cmp);40 for(int i=1;i<=n;++i)41 {42 if(lei[i].begin>now) now=lei[i].end,ans++;43 }44 printf("%d",ans); 45 return 0;46 }
2625 雷达安装
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。