Problem 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
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct node
{
float l,r,x,y;
}d[1100];
int cmp(node x,node y)
{
return x.l<y.l;/*按照区域的最左端排序*/
}
int main()
{
int sum,t,m,n,flog=1,Case=1,i,num,j;
while(scanf("%d%d",&m,&n),m||n)
{
for(i=0;i<m;i++)
{
scanf("%f%f",&d[i].x,&d[i].y);
if(d[i].y>n)
{
flog=0;break;
}
else
{
d[i].l=d[i].x-sqrt(n*n-d[i].y*d[i].y);/*求出雷达的扫描区域*/
d[i].r=d[i].x+sqrt(n*n-d[i].y*d[i].y);
}
}
printf("Case %d: ",Case);
if(flog==0) printf("-1\n");
else
{
int sign=0;num=0;
sort(d,d+m,cmp);
num++;sign=d[0].r;/*这个很重要,sign始终标记雷达所能扫描的最右端*/
for(i=1;i<m;i++)/*至少设置一个雷达,如果当前判断的区域达不到雷达最右端,加设一个雷达*/
{
if(d[i].r<sign)
sign=d[i].r;
else if(d[i].l>sign)
{
num++;sign=d[i].r;
}
}
printf("%d\n",num);
}
}
return 0;
}

最新文章

  1. LR中的时间戳函数web_save_timestamp_param
  2. iOS json解析的几种方法 NSJSONSerialization,JSONKit,SBJson ,TouchJson
  3. 安装oracle
  4. 线段树 Codeforces Round #197 (Div. 2) D. Xenia and Bit Operations
  5. UVa 514 (stack的使用) Rails
  6. objective-c中是如何实现线程同步的?
  7. JSP&amp;Servlet学习手册
  8. projecteuler----&amp;gt;problem=9----Special Pythagorean triplet
  9. Batch File Rename Utility(文件批量改名软件) 1.1.4231
  10. 怎么去掉织梦网站首页带的index.html/index.php
  11. 洛谷P1783 海滩防御 分析+题解代码
  12. vue和angular的区别:
  13. Apache服务器配置与管理
  14. checkbox和radio元素的样式设置(简易版)
  15. matplotlib图表组成元素
  16. 开发nginx启动脚本及开机自启管理(case)
  17. javascript Object的新方法
  18. 一起学Hadoop——文件的上传、分发与打包
  19. Scala:Method 小技巧,忽略result type之后的等号
  20. js 递归

热门文章

  1. Listview模板
  2. 网站Gzip压缩
  3. hibernate注解之@Onetomany、@Manytoone、@JoinColumn
  4. 聊聊JS动画库:Velocity.js
  5. 《程序设计基础》实验题目2 c文件读取(反序列化?) 链表排序
  6. 浅谈 extern &quot;C&quot;
  7. Linux:SSH连接原理
  8. random随机库
  9. Java基础学习总结(41)——JPA常用注解
  10. [置顶] Java基础学习总结(34)——HTTP协议详解