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 题目大意:
就是给你n组数据和圆的半径d,让你在x轴上画半径为d的圆,问:如果将所有的点都画进去,最少需要多少个圆,这个题目和导弹拦截有点像,不过更加简单 思路:
就是先判断d是不是大于等于0,如果d<0,肯定是输出-1的,
之后输入数字,如果有坐标的纵坐标比d还要大,那么也是不对的也要输出-1
之后对坐标进行处理,把每一个坐标在x轴上的范围标记出来,并进行排序,先排右边的位置,右边位置越小就排在越前面,因为我们是要从横坐标左边往右边排
如果右边相同,就排左边,左边大的先排,因为区间范围小的肯定可以把区间范围大的包括进去,反之则不行。
排完序之后
就开始画圈圈。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <iostream>
using namespace std;
const int maxn=1010;
struct node
{
double l,r;
}exa[maxn];
bool cmp(node a,node b)
{
if(a.r==b.r) return a.l>b.l;
return a.r<b.r;
} int main()
{
int n,cnt=0;;
double d,a,b;
while(scanf("%d%lf",&n,&d)!=EOF&&(n+d))
{
bool flag=0;
if(d>=0) flag=1;
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&a,&b);
if(b>d) flag=0;
if(flag)
{
exa[i].l=a-sqrt(d*d-b*b);
exa[i].r=a+sqrt(d*d-b*b);
}
}
sort(exa,exa+n,cmp);
int ans=-1;
if(flag)
{
ans=1;
double maxr=exa[0].r;
for(int i=1;i<n;i++)
{
if(exa[i].l>maxr)
{
ans++;
maxr=exa[i].r;
}
}
}
cout << "Case " << ++cnt << ": " << ans << endl;
}
return 0;
}

  

												

最新文章

  1. jquery缓存使用jquery.cookies.2.2.0.min.js
  2. BZOJ4597: [Shoi2016]随机序列
  3. 如何整合最新的Flex sdk和Air sdk。
  4. 转载:手机网页制作的认识(有关meta标签)
  5. ASP.NET MVC WEB API必知必会知识点总结
  6. 网络初见&amp;网络监测
  7. oracle中存储过程中调用存储过程
  8. Maven学习总结(二)——Maven项目构建过程练习
  9. [芯片][MPU6050] MPU60X0的DMP相关链接
  10. WPF--Blend制作Button控件模板
  11. 根据ip查询地区,经纬度等-geoip2
  12. 关于JDK中的运算符和变量
  13. requirejs实践一 加载JavaScript文件
  14. HDU 2089 不要62(数位DP)
  15. linux共享windows资料
  16. java 根据时间生成唯一id
  17. str_翻转字符串
  18. phpcmsv9更改fckeditor编者ueditor编辑
  19. Mysql5.7 安装
  20. Bash内置命令

热门文章

  1. 【微服务No.1】Consul服务发现在windows下简单使用
  2. axios 中文文档(转载)
  3. Java 学习笔记 正则表达式
  4. 【Java每日一题】20170302
  5. 构建SpringBoot第一个Demo
  6. python 实现微信自动回复(自动聊天)
  7. HTML基础总结
  8. Linux 安装 tomcat
  9. Git基本操作和GtHub 特殊技巧
  10. 产品经理说|AIOps 让告警管理变得更智能