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. AngularJS开发指南6:AngularJS表单详解

    表单控件(input, select, textarea )是用来获取用户输入的.表单则是一组有联系的表单控件的集合. 用户能通过表单和表单控件提供验证的服务,知道自己的输入是否合法.这样能让用户交互 ...

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

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

  3. Python安装、配置图文详解(转载)

    Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(I ...

  4. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...

  5. ansible 的组件inventory

    P44 Ansible 的默认的inventory的是一个静态的ini格式的文件/etc/ansible/hosts. 我们还可以通过ansible_hosts环境变脸指定或者运行ansible和an ...

  6. 创建Car类,实例化并调用Car类计算运输的原料量是否足够

    package dx; public class Car { //构造类 public Car() { System.out.println("Car的构造类"); } //构造类 ...

  7. Java-LinkedHashSet

    如下: package 集合类.Set类; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedHash ...

  8. Luncene 学习入门

    Lucene是apache组织的一个用java实现全文搜索引擎的开源项目. 其功能非常的强大,api也很简单.总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document ...

  9. Bringing up interface eth0: Error:Connection activation failed:Device not managed by NetworkManager

    Just follow the below steps and everything will be ok...   1. Remove Network Manager from startup Se ...

  10. CVE: 2014-6271、CVE: 2014-7169 PATCH方案分析

    目录 . RedHat官方给的PATCH第一套方案 . RedHat官方给的PATCH临时方案 . RedHat官方给的PATCH第二套方案 1. RedHat官方给的PATCH第一套方案 0x1: ...