poj 1328 【Radar Installation】【几何转化、区间覆盖】

简介: 点击打开题目 Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 54970   Accepted: 12381 Descrip...

点击打开题目

Radar Installation
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 54970   Accepted: 12381

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

题目翻译:给出两个数字n和d,n代表n个P点,d代表圆的半径,然后下面n行,每行一组坐标(x,y),分别代表所有的P点,

求:在x坐标轴上,至少要画几个以d为半径的圆,才能使P点均在圆内。


解题思路:分别以P点为圆心,d为半径画圆,圆分别会在x轴上截取相应的线段,只要线段内有圆心,则即可覆盖P点,因此问题

便转化为求X轴上共有多少独立区间!


#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
using namespace std;
struct A{
	double zuo,you;
};
int cmp(A a,A b){
	return a.zuo<b.zuo;
}
int main(){
	int t=1,n,i,r,x,y,yes;
	A a[1200];
	while(scanf("%d%d",&n,&r)&&!(n==0&&r==0)){
        yes=0;
		for(i=1;i<=n;i++){
			scanf("%d%d",&x,&y);
			if(r<y) yes=1;
			double num=sqrt((double)(r*r-y*y));
			a[i].zuo=double(x-num);
			a[i].you=double(x+num);
		}
		if(yes){printf("Case %d: -1\n",t++);continue;}
		sort(a+1,a+n+1,cmp);
		double k=a[1].you;
		int count=1;
		for(i=2;i<=n;i++){
			if(a[i].zuo>k){
				k=a[i].you;
				count++;
			}
			else{
				if(a[i].you<k)
					k=a[i].you;
			}
		}
		printf("Case %d: %d\n",t++,count);
	}
	return 0;
}


目录
相关文章
|
5月前
|
Python
python实现:旋转矩阵转换为四元数
python实现:旋转矩阵转换为四元数
155 0
|
7月前
|
算法 Python
二维矩形件排样算法之最低水平线搜索算法实现
二维矩形件排样算法之最低水平线搜索算法实现
232 0
|
8月前
|
算法 测试技术 C#
【数学】【计算几何】1453. 圆形靶内的最大飞镖数量
【数学】【计算几何】1453. 圆形靶内的最大飞镖数量
|
8月前
【每日一题Day247】LC1401圆和矩形是否有重叠 | 数学
【每日一题Day247】LC1401圆和矩形是否有重叠 | 数学
55 0
|
算法
秒懂算法 | 计算几何:圆
计算几何的基础是点积和叉积,它们定义了向量的大小和方向的关系,是其他计算几何概念和算法的出发点。在点积和叉积的基础上,本篇重点介绍圆覆盖。 计算几何题目的代码大多繁琐冗长,因此掌握模板代码是学习计算几何的关键。本篇精心组织了经典的几何模板
18146 1
秒懂算法 | 计算几何:圆
|
传感器 机器学习/深度学习 算法
【方位估计 】基于music算法均匀线阵的标量阵与矢量阵的方位估计附Matlab源码
【方位估计 】基于music算法均匀线阵的标量阵与矢量阵的方位估计附Matlab源码
|
前端开发 数据可视化 API
【数学篇】05 # 如何用向量和坐标系描述点和线段?
【数学篇】05 # 如何用向量和坐标系描述点和线段?
205 0
【数学篇】05 # 如何用向量和坐标系描述点和线段?
|
前端开发 数据可视化 图形学
【数学篇】09 # 如何用仿射变换对几何图形进行坐标变换?
【数学篇】09 # 如何用仿射变换对几何图形进行坐标变换?
180 0
【数学篇】09 # 如何用仿射变换对几何图形进行坐标变换?
|
数据可视化 数据挖掘 Python
跟着Nature学作图:R语言ggplot2三角热图按照指定的角度旋转
跟着Nature学作图:R语言ggplot2三角热图按照指定的角度旋转
|
Python
LeetCode每日一题——883. 三维形体投影面积
在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。
128 0
LeetCode每日一题——883. 三维形体投影面积