题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=27586

题意:

在海岸线上摆放雷达并限定雷达覆盖半径d,再以海岸线为轴,给定海上岛屿坐标,求至少需要多少雷达可以覆盖所以岛屿,如果不能输出'-1'。

案例:

Sample Input

3 2

1 2

-3 1

2 1

1 2

0 2

0 0

Sample Output

  Case 1: 2Case 2: 1

分析:

可以转换为区间覆盖问题。以岛屿为圆心,雷达扫射半径为半径,求出此圆与x轴(即海岸线)交点坐标,两交点坐标间即为雷达摆放区间(包括两交点(在此区间任意位置摆放雷达均可覆盖岛屿))。接下来即为区间覆盖求解问题了。

源代码:

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<algorithm>
 4 using namespace std;
 5 int n,num;
 6 struct former
 7 {
 8     double l;
 9     double r;
10 }a[1005];
11 double cmp(former m,former t)//区间排序
12 {
13     if(m.r==t.r) return m.l>t.l;
14     else
15         return m.r<t.r;
16 }
17 void change()//计算所需雷达
18 {
19     int k=0;
20     sort(a,a+n,cmp);
21     for(int j=1;j<n;j++)
22     {
23         if(a[j].l>a[k].r)
24         {
25             num++;
26             k=j;
27         }
28     }
29 }
30 int main()
31 {
32     int cnt=0;
33     double x,y,d;
34     while(scanf("%d%lf",&n,&d)&&n&&d)
35     {
36         num=1;
37         for(int i=0;i<n;i++)
38         {
39             scanf("%lf%lf",&x,&y);
40             if(d<y||d<0)//判断是否有岛屿超出雷达覆盖范围
41                 num=-1;
42              a[i].l=x-sqrt(d*d-y*y);//岛屿转换可摆放雷达区间
43             a[i].r=x+sqrt(d*d-y*y);
44         }
45         if(num==-1)
46             printf("Case %d: -1\n",++cnt);
47         else
48         {
49             change();
50             printf("Case %d: %d\n",++cnt,num);
51         }
52     }
53     return 0;
54 }

转载于:https://www.cnblogs.com/huaszjh/p/4719074.html

Radar Installation相关推荐

  1. 【贪心】Radar Installation(poj 1328)

    Radar Installation poj 1328 题目大意: 在平面直角坐标系的一二象限上有n个小岛,现在让你在x坐标上布置雷达,每个雷达可以侦测以它为原心,半径为m的圆内的所有小岛,现在问侦测 ...

  2. 【POJ - 1328】Radar Installation(贪心+计算几何)安装雷达辐射岛屿

    题干: Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the ot ...

  3. POJ Radar Installation 1328(雷达)贪心算法

    问题描述 问题链接 Description Assume the coasting is an infinite straight line. Land is in one side of coast ...

  4. poj 1328 Radar Installation

    题目链接:http://poj.org/problem?id=1328 题意: 设x轴为海岸,下方为陆地,上方为海.海上有n个岛屿,现在需要用雷达将所有的岛屿覆盖起来.给定岛屿个数及每个岛屿的坐标,给 ...

  5. Radar Installation(贪心,sort)

    在poj上C++可以AC,但G++不行.杭电上更是好多的TLE,结果把cin改成scanf便可以轻松AC. #include <iostream> #include <algorit ...

  6. POJ - 1328 Radar Installation(贪心+思维)

    题目链接:点击查看 题目大意:校长想通过监控设备覆盖学校内的N座建筑物,每座建筑物被视作一个质点,在笛卡尔坐标系中给出他们的坐标(x,y),并且所有建筑物均处在x轴的上方.因为学校的供电和传输线路均沿 ...

  7. POJ 1328 Radar Installation【贪心】

    POJ 1328 题意: 将一条海岸线看成X轴,X轴上面是大海,海上有若干岛屿,给出雷达的覆盖半径和岛屿的位置,要求在海岸线上建雷达,在雷达能够覆盖全部岛屿情况下,求雷达的最少使用量. 分析: 贪心法 ...

  8. POJ-1328 Radar Installation 贪心

    以每个点算出左右覆盖的雷达所在x轴范围,然后贪心计算出所需圆的个数. 当后一个点的圆心在x轴的左坐标在前一个点的右坐标的右坐标之前,则这个点就会被覆盖. 代码如下:(C++能过,G++ runtime ...

  9. 【POJ1328】Radar Installation(贪心,决策包容)

    problem 平面直角坐标系上有n个点. 在x轴上找尽量少的点,并以这些点为圆心画一个半径为d的圆,使得给定的点都在画出来的圆里. 求最少要画的点数,如果不能输出-1. solution 一.不能的 ...

最新文章

  1. 逃课上网吧编程、玩摇滚的另类学生,逆袭成长为独角兽公司的 CTO
  2. k8s 命令 重启_快速入门Kubernetes(K8S)——资源清单
  3. Acwing第 32 场周赛【完结】
  4. Linux服务器---关闭selinux
  5. php画中画,画中画功能 怎么将两个视频叠加播放,制作成画中画效果
  6. 请求的安全信息不可用或无法显示
  7. python 调用控制台并获取返回结果_Java调用Python脚本并获取返回值
  8. 完整性校验用到常见的算法_几种常见的校验算法
  9. python输出生日程序_Python中:利用七段数码管输出自己的生日及系统当前时间
  10. VictoriaMetrics入门与实战
  11. Jquery.Datatables dom表格定位
  12. 如何删除Linux一个目录下部分类型之外的所有文件的三种方法
  13. 三相PWM整流器dq解耦控制
  14. 孩子成长-跟同学相处
  15. 周期串(Periodic Strings)
  16. latex里图片大小如何调整_LATEX图片位置调整
  17. Schizophrenia Bulletin: 精神分裂症的潜在临床-结构维度
  18. c++ http gzip压缩解压缩
  19. 吗咿呀嘿-用js来搞个简单的人脸识别
  20. druid password 加密原生使用

热门文章

  1. 国际人工智能算法与应用研讨会(WASA 2018)参会笔记
  2. 突发!央行确认支付宝3种违法违规行为,处罚18万元!
  3. 台湾印象之六:林志玲神话
  4. js中的json ajax,js结合json实现ajax简单实例
  5. cad线性标注命令_CAD常用标注快捷键和命令
  6. unity声音组件AudioSource的使用
  7. 李宏毅机器学习课程4~~~分类:概率生成模型
  8. 李宏毅机器学习课程2~~~误差从哪里来?
  9. python超神之路:python异常对照表
  10. 教你简单理解分布式与传统单体架构的区别