Radar Installation
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 60381   Accepted: 13610

Description

Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only cover d distance, so an island in the sea can be covered by a radius installation, if the distance between them is at most d.

We use Cartesian coordinate system, defining the coasting is the
x-axis. The sea side is above x-axis, and the land side below. Given the
position of each island in the sea, and given the distance of the
coverage of the radar installation, your task is to write a program to
find the minimal number of radar installations to cover all the islands.
Note that the position of an island is represented by its x-y
coordinates.



Figure A Sample Input of Radar Installations

Input

The
input consists of several test cases. The first line of each case
contains two integers n (1<=n<=1000) and d, where n is the number
of islands in the sea and d is the distance of coverage of the radar
installation. This is followed by n lines each containing two integers
representing the coordinate of the position of each island. Then a blank
line follows to separate the cases.

The input is terminated by a line containing pair of zeros

Output

For
each test case output one line consisting of the test case number
followed by the minimal number of radar installations needed. "-1"
installation means no solution for that case.

Sample Input

3 2
1 2
-3 1
2 1 1 2
0 2 0 0

Sample Output

Case 1: 2
Case 2: 1

Source

 
 
 
题意:有一个坐标轴 在X轴上方是海 下方是陆地 X轴是海岸线,海上有N个小岛,现在要在海岸线上安装雷达,

雷达的覆盖范围是一个以R为半径的圆,请用最少的雷达覆盖所有的小岛;当无法覆盖时 输出-1

思路:算出 每个小岛能被覆盖的雷达的圆心,即以小岛为圆心 R为半径 作圆,该圆与X轴的交点:

左交点为x-sqrt(R*R-y*y); 右交点为x+sqrt(R*R-y*y);

按照 左交点 排序,如果i点的左交点在 当前雷达的右边 则需安装一个新雷达,更新雷达

否则 如果 i点的右交点也在当前雷达的左边 则把当前雷达的圆心更新为该点的右交点;

代码

::

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
 struct node{
    double x;
    double y;
 }que[1005];
 bool cmp(struct node a,struct node b){
   return a.x<b.x;
 }
int main(){
   int n;
   double d;
   int count=0;
   while(scanf("%d%lf",&n,&d)!=EOF){
       int sum;
       if(n==0&&d==0)
       break;
       int flag=0;
       count++;
      for(int i=0;i<n;i++){
          double a,b;
          scanf("%lf%lf",&a,&b);
          que[i].x=a-sqrt(d*d-b*b);
          que[i].y=a+sqrt(d*d-b*b);
          if(b>d||d<=0||b<0)
          flag=1;

}
      if(!flag){
      sort(que,que+n,cmp);
      double temp;
      temp=que[0].y;
       sum=1;
      for(int i=1;i<n;i++){
          if(que[i].x>temp){
              sum++;
              temp=que[i].y;
          }
          else if(que[i].y<temp){
             temp=que[i].y;
          }
      }
      }
      if(flag)
      printf("Case %d: -1\n",count);
      else
      printf("Case %d: %d\n",count,sum);
   }
   return 0;
}

 
 
 
 
 
 
 
 
 

poj1328贪心 雷达,陆地,岛屿问题的更多相关文章

  1. POJ1328贪心放雷达

    题意:        有一个二维坐标,y>0是海,y<=0是陆地,然后只能在y=0的岸边上放雷达,有n个城市需要被监控,问最少放多少个雷达. 思路:       贪心去做就行了,其实题目不 ...

  2. Poj1328 用雷达覆盖所有的岛屿

    (此配图来自http://blog.csdn.net/zhengnanlee/article/details/9613161) 图中ABCD为海岛的位置.题目中会给出几个海岛的坐标位置,雷达覆盖半径d ...

  3. POJ1328贪心

    题意:如今我们位于沿海地区,需要安装大炮,使得火力可以覆盖整个区域.海岸线可以视为是无限长的直线.陆地位于海岸线的一侧,海洋位于另一侧.海洋里有若干个岛屿,每个小岛可以视为海洋中的一个点.我们需要在海 ...

  4. poj1328 贪心

    http://http://poj.org/problem?id=1328 神TM贪心. 不懂请自行搜博客. AC代码: #include<cstdio> #include<algo ...

  5. poj1328贪心中的区间问题

    题意:给定海岛个数.雷达半径以及各海岛坐标,求能覆盖所有海岛的最小雷达数. 思路:先对每个海岛求一个区间:即能覆盖它的所有雷达的圆心所构成的区间.然后对区间排序,定义一个最右点over,依次延伸ove ...

  6. poj1328 Radar Installation(贪心 策略要选好)

    https://vjudge.net/problem/POJ-1328 贪心策略选错了恐怕就完了吧.. 一开始单纯地把island排序,然后想从左到右不断更新,其实这是错的...因为空中是个圆弧. 后 ...

  7. UVAlive 2519 Radar Installation (区间选点问题)

    Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...

  8. 翻译: 星球生成 II

    翻译: 星球生成 II 本文翻译自Planet Generation - Part II 译者: FreeBlues 以下为译文: 概述 在前一章 我解释了如何为星球创建一个几何球体. 在本文中, 我 ...

  9. 雷达覆盖,贪心,类似活动安排(POJ1328)

    题目链接:http://poj.org/problem?id=1328 解题报告: 1.按照头结点排序. #include <cstdio> #include <cmath> ...

随机推荐

  1. 由DataGridTextColumn不能获取到父级DataContext引发的思考

    在项目中使用DataGrid需要根据业务动态隐藏某些列,思路都是给DataGrid中列的Visibility属性绑定值来实现(项目使用MVVM),如下 <DataGridTextColumn H ...

  2. 【Moqui框架】Moqui连接各种类型的数据库

    Moqui连接mysql数据库 各种数据库的连接文本: -- Derby<datasource group-name="transactional" database-con ...

  3. Moqui学习Day1

    运行时目录以及Moqui的xml配置文件 Moqui框架部署运行主要有三个核心部分: 可执行的war包文件 运行时目录 Moqui配置文件XML格式 不管怎么使用这个可执行的war文件,你必须拥有一个 ...

  4. 微信支付PHP SDK —— 公众号支付代码详解

    在微信支付 开发者文档页面 下载最新的 php SDK http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 这里假设你已经申请完微 ...

  5. 视频播放用户行为记录之使用Cache的方法

    在上一篇文章http://www.cnblogs.com/ryuasuka/p/3483632.html中,为了获取视频播放时的用户行为,并且要异步地将其写入XML文件中,我采用了先写入log,后生成 ...

  6. .net架构设计读书笔记--第二章 设计体系结构

    第五节 探索领域架构 一.领域驱动设计的价值与意义 最初在java中使用,.net要晚些才引入.领域驱动设计出现之初的争议.一个向导,少走弯路   1. 我们真的需要DDD吗? DDD并不适用于每个软 ...

  7. startsWith

    if (!String.prototype.startsWith) { Object.defineProperty(String.prototype, 'startsWith', { enumerab ...

  8. PowerDesigner逆向工程从现有数据库生成PDM

    如题,我想对于一个旧系统或者帮别人的系统进行擦屁股时,数据库设计以及关系都是非常好的切入点: 使用这个方法的前提,就是在数据库设计中,已经有明确的主外键关系(这里只针对中小型设计,业务逻辑强的,对于特 ...

  9. IOS基础之(十四) KVO/KVC

    资料参考: http://www.cnblogs.com/kenshincui/p/3871178.html http://www.cnblogs.com/stoic/archive/2012/07/ ...

  10. 设定JS全局的公共变量

    1. 新建一个标签文件 javaScriptVariables.tag 新建一个标签文件 javaScriptVariables.tag放在 %/HelloWorldWebPro/webroot/WE ...