Radar Installation

Time Limit: 1000MS Memory Limit: 10000K

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.

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轴上方很多个点,要求用圆心在x轴上半径为r的圆将这些点覆盖,问最少要用多少个圆。这是一个很好的题。

  • 一开始知道这是一个贪心,但是贪心的方法很久都没想到。其实就是先将这些点按照x坐标排序,然后确定第一个点的圆心,然后看第二个点圆能够建立圆心区域的最左边是否在第一个圆心的左边,是则将第二个圆心替换第一个圆的圆心,如果不是就看第二个点是否在第一个圆内,如果在圆内则不用管,不在就需要建一个新的圆来包含这个点,然后依次类推就可以得到最佳答案。输出-1就是y轴上的坐标比给出的r还更大。

  • 还有就是要注意一下浮点数精度的问题。


#include<stdio.h>
#include<queue>
#include<algorithm>
#include<math.h>
using namespace std;
const int maxn = 1010;
struct node
{
int x,y;
} p[maxn]; bool cmp(node a,node b)
{
if(a.x != b.x)
return a.x < b.x;
return a.y > b.y;
} bool init(int n,int r)
{
bool flag = false;
for(int i=0; i<n; i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
if(p[i].y > r)
flag = true;
}
sort(p,p+n,cmp);
return flag;
} int solve(int n,int r)
{
double pre_pos = -100000;
int ans = 1;
node now;
queue<node> qu;
for(int i=0; i<n; i++)
qu.push(p[i]);
pre_pos = 0x7f7f7f7f;
while(!qu.empty())
{
now = qu.front();
qu.pop();
double x = now.x + sqrt(r*r - now.y*now.y);
if(x < pre_pos)//圆心替换
{
pre_pos = x;
continue;
}
if((now.x-pre_pos)*(now.x-pre_pos) + now.y*now.y > r*r)//不包含在上一个点的圆内,需要新的圆
{
ans++;
pre_pos = x;
}
}
return ans;
} int main()
{
int n,r,t = 1;
while(scanf("%d%d",&n,&r))
{
if(n+r == 0)
return 0;
bool flag = init(n,r);
if(flag)
{
printf("Case %d: -1\n",t++);
continue;
}
int ans = solve(n,r);
printf("Case %d: %d\n",t++,ans);
}
}

POJ:1328-Radar Installation的更多相关文章

  1. 贪心 POJ 1328 Radar Installation

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

  2. POJ 1328 Radar Installation 贪心 A

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

  3. Poj 1328 / OpenJudge 1328 Radar Installation

    1.Link: http://poj.org/problem?id=1328 http://bailian.openjudge.cn/practice/1328/ 2.Content: Radar I ...

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

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

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

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

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

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

  7. poj 1328 Radar Installation(贪心)

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

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

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

  9. POJ 1328 Radar Installation(很新颖的贪心,区间贪心)

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

  10. POJ - 1328 Radar Installation(贪心区间选点+小学平面几何)

    Input The input consists of several test cases. The first line of each case contains two integers n ...

随机推荐

  1. RL_RTX函数

    1 延时:os_itv_set(usFrequency) //设置延时周期,配合os_itv_wait使用:os_itv_wait() 是绝对延迟是包含调用前的时间, os_dly_wait() 是相 ...

  2. mongodb的投影

    mongodb 投影意思是只选择必要的数据而不是选择一个文件的数据的整个.如果一个文档有5个字段,需要显示只有3个,然后选择其中只有3个字段. find() 方法 MongoDB 的find()方法, ...

  3. BZOJ3004: 吊灯(结论 毒瘤)

    题意 $n$个节点的树,判断能否划分成$\frac{n}{k}$个大小为$k$的联通块 Sol 首先$k$必须是$n$的倍数. 然后刚开始我就非常傻的以为输出所有约数就行了.. 但是图是这样,$k = ...

  4. PHP 获取JSON json_decode返回NULL解决办法

    在用json_decode对JSON格式的字符串进行解码时竟然为空,页面空白啊,整半天检查这里检查那里,问同事都没用. 今天必应搜索了下,问题解决了,原来是有BOM头输出,大虾的解决办法如下: 1). ...

  5. Windows中将nginx添加到服务

    下载安装nginx http://nginx.org/en/download.html 下载后解压到C盘 C:\nginx-1.14.0 添加服务 需要借助"Windows Service ...

  6. Ubuntu11.04 安装cuda4.3

    一.卸载官方驱动并安装显卡驱动 1. sudo gedit /etc/modprobe.d/blacklist.conf,在文件末尾加上如下五行,然后保存 blacklist vga16fb blac ...

  7. Android studio 3.1.1 找不到DDMS

    先找到AndroidStudio配置的SDK路径: 在SDK的/tools/路径下[就是和配置ADB一样的路径]有个monitor.bat 的批处理文件: 鼠标连续点击两下monitor.bat这个批 ...

  8. 【整站源码分享】分享一个JFinal3.4开发的整站源码,适合新手学习

    分享这个源码是14年开发上线的<威海创业者>站点的全套整站源码,前后端都在一个包里.当时开发使用的是JFinal1.4,最近改成了JFinal3.4.使用的JSP做的页面.有一定的参考价值 ...

  9. 一个mybatis错误导致无法启动项目的问题

    今天遇到Mybatis一个问题,导致项目一直起不来,查了很久发现是MapperXML的错,问题表现为: 系统始终起不来,但也不报错,始终卡到如下信息位置: 信息: Initializing Sprin ...

  10. Python中的绝对路径和相对路径

    大牛们应该对路径都很了解了,这篇文章主要给像我这样的入门小白普及常识用的,啊哈 下面的路径介绍针对windows,其他平台的暂时不是很了解. 在编写的py文件中打开文件的时候经常见到下面其中路径的表达 ...