Radar Installation
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 106491   Accepted: 23648

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 题目意思:
以x轴为分界,y>0部分为海,y<0部分为陆地,给出一些岛屿坐标(在海中),再给出雷达可达到范围,雷达只可以安在陆地上,问最少多少雷达可以覆盖所以岛屿。 分析:
开始是这么想的:把二维抽象位1维的,只有x轴,因为岛屿都投影在x轴上,第一个雷达站在最左边是第一个岛屿,从头开始遍历这些岛屿,在第一个雷达站覆盖范围内的就
跳过,不在的就新建立一个雷达站,要求第二个雷达站的左边界刚好在没有覆盖的岛屿上(注意抽象为1维)
试了一下,wa了,这么做虽然可以减少雷达站的数量,但是肯定步数最优的 正确的做法:
对每个岛屿,要有雷达覆盖的话,那么其在x轴上面必须要有一共区间,雷达站必须在这个区间内才能覆盖该岛屿
求出每个岛屿的区间,如果有一些区间重叠的话,那么一共雷达站就能覆盖多个岛屿呀
将这些区间按照右边界大小排序(升序)
第一个雷达站放在第一个区间的右边界,如果第二个岛屿的左边界大于第一个岛屿的右边界,说明第一个雷达不能覆盖第二个岛屿,需要新建一个雷达站(在第二个岛屿的右边界)
如果第二个岛屿的左边界小于或者等于第一个岛屿的左边界的话,那么说明在第一个岛屿右边界建立的雷达站既能覆盖第一个岛屿也能覆盖第二个岛屿,所以跳过此岛屿,
下面依次类推

code:
#include<stdio.h>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <math.h>
#include <cstdlib>
#include <queue>
using namespace std;
#define max_v 1005
struct node
{
double x1,x2;
}p[max_v];
bool cmp(node a,node b)
{
return a.x2<b.x2;//岛屿右边界升序排序
}
int main()
{
int n,d,x,y;
int c=;
while(cin>>n>>d,n&&d)
{
int f=;
for(int i=;i<n;i++)
{
cin>>x>>y;
if(y>d)
f=;
double x1=x-sqrt(d*d*1.0-(y*y*1.0));
double x2=x+sqrt(d*d*1.0-(y*y*1.0));
p[i].x1=x1;
p[i].x2=x2;//得到岛屿左右边界
}
if(f==)
{
printf("Case %d: -1\n",c++);//存在岛屿到x的垂直距离大于雷达覆盖距离
continue;
}
sort(p,p+n,cmp);
int sum=;
int cur=;
for(int i=;i<n;i++)
{
if(p[i].x1>p[cur].x2)
{
cur=i;
sum++;
}
}
printf("Case %d: %d\n",c++,sum);
}
return ;
}


POJ 1328 Radar Installation(很新颖的贪心,区间贪心)的更多相关文章

  1. POJ 1328 Radar Installation 贪心 A

    POJ 1328 Radar Installation https://vjudge.net/problem/POJ-1328 题目: Assume the coasting is an infini ...

  2. 贪心 POJ 1328 Radar Installation

    题目地址:http://poj.org/problem?id=1328 /* 贪心 (转载)题意:有一条海岸线,在海岸线上方是大海,海中有一些岛屿, 这些岛的位置已知,海岸线上有雷达,雷达的覆盖半径知 ...

  3. poj 1328 Radar Installation (简单的贪心)

    Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42925   Accepted: 94 ...

  4. poj 1328 Radar Installation(贪心)

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

  5. POJ 1328 Radar Installation 【贪心 区间选点】

    解题思路:给出n个岛屿,n个岛屿的坐标分别为(a1,b1),(a2,b2)-----(an,bn),雷达的覆盖半径为r 求所有的岛屿都被覆盖所需要的最少的雷达数目. 首先将岛屿坐标进行处理,因为雷达的 ...

  6. poj 1328 Radar Installation(nyoj 287 Radar):贪心

    点击打开链接 Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43490   Accep ...

  7. poj 1328 Radar Installation【贪心区间选点】

    Radar Installation Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other) ...

  8. POJ 1328 Radar Installation【贪心】

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

  9. poj 1328 Radar Installation(贪心+快排)

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

随机推荐

  1. eclipse中php项目开发的环境配置说明

    PHP开发的环境配置比Java开发要简单点,也就是我们不用安装jdk了,我们不用安装tomcat了,仅仅通过一种集成环境来安装就好了. PHP开发,其实有很多种环境配置方式,我这里使用了XAMPP进行 ...

  2. 查看postgre都有哪些语句占用CPU

    查看占用CPU最多的几个postgresql ps aux | grep postgres | sort -n -r -k 3 | head -10 | awk '{print $2, $3}' 查看 ...

  3. unity配置Android SDK,并构建导出apk格式

    1.点击 Edit  -->   preferences出现如图界面 2.在Android中SDK选项中放入Android SDK:JDK选项中放入Java JDK.(下载地址:http://t ...

  4. QT5.3 杂记

    Qt5下,QWidget系列从QtGui中被剥离出去,成为单独的QtWidget模块.随着Qt Quick2的引入,QtDeclarative也逐渐和QWidget系列也脱离关系. 最终:在Qt5下的 ...

  5. Android之自定义View以及画一个时钟

    https://www.2cto.com/kf/201509/443112.html 概述: 当Android自带的View满足不了开发者时,自定义View就发挥了很好的作用.建立一个自定义View, ...

  6. python nose测试

    前提: python3 安装nose 结果: nose目录下有子目录tests和mybag,在mybag下新建my_age.py, 内部有Students类,age属性. tests目录下写Sutde ...

  7. Threading in C# 5

    Part 5: Parallel Programming In this section, we cover the multithreading APIs new to Framework 4.0 ...

  8. 【Leetcode】【Easy】Count and Say

    The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...

  9. Linux文件的I/O操作

    C标准函数与系统函数的区别   标准函数printf调用应用层api,然后应用层api调用内核层api,再通过内核层api调用硬件设备   一个pirntf打印helloworld那么sys_writ ...

  10. 解决zabbix3.4X图形页面中文乱码

    解决zabbix3.4X页面中文乱码 1.在windows的C:\Windows\Fonts找到字体文件simkai.ttf2.在zabbix服务器上找到zabbix默认字体文件graphfont.t ...