Poj 1328 / OpenJudge 1328 Radar Installation
1.Link:
http://poj.org/problem?id=1328
http://bailian.openjudge.cn/practice/1328/
2.Content:
Radar Installation
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 52833 Accepted: 11891 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 0Sample Output
Case 1: 2
Case 2: 1Source
3.Method:
(1)求出每个岛能够安装灯塔的区域,用结构体表示Lines
(2)根据最右快排,这里要尤其注意double类型的compare怎么写
(3)贪心算法求最小灯塔数量
4.Code:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>using namespace std;
struct LINE
{
double l;
double r;
};int cmp(const void *a,const void *b)
{
LINE line1 = *((LINE *)a);
LINE line2 = *((LINE *)b);
/*if(line1.r == line2.r)
{
if(line1.l == line2.l) return 0;
return line1.l > line2.l ? 1 : -1;
}
else return line1.r > line2.r ? 1 : -1;*/
if(line1.r == line2.r) return 0;
else return line1.r > line2.r ? 1 : -1;
}int main()
{
//freopen("D://input.txt", "r", stdin);int i;
int n,d;
int count = 1;
int x,y;
int flag;
double ins;
cin >> n >> d;
while(n!= 0 || d != 0)
{LINE *lines = new LINE[n];
flag = 1;
for(i = 0; i < n; ++i)
{
cin>>x>>y;
if(d < y) flag = 0;
else
{
ins = sqrt(d * d - y * y);
lines[i].l = x - ins;
lines[i].r = x + ins;
}
}if(flag == 0) cout<<"Case "<< (count++) <<": -1"<<endl;
else
{
qsort(lines,n,sizeof(LINE),cmp);
/*for(i = 0; i < n; ++i)
{
cout << lines[i].l << " " << lines[i].r << endl;
}*/
int num = 1;
double max_r = lines[0].r;
for(i = 1; i < n; ++i)
{
if(max_r < lines[i].l)
{
num++;
max_r = lines[i].r;
}
}
cout << "Case " << (count++) << ": " << num <<endl;
}
delete [] lines;
cin >> n >> d;
}//fclose(stdin);
return 0;
}
5:Reference:
http://blog.sina.com.cn/s/blog_48f85e1d0100nslz.html
Poj 1328 / OpenJudge 1328 Radar Installation的更多相关文章
- 贪心 POJ 1328 Radar Installation
题目地址:http://poj.org/problem?id=1328 /* 贪心 (转载)题意:有一条海岸线,在海岸线上方是大海,海中有一些岛屿, 这些岛的位置已知,海岸线上有雷达,雷达的覆盖半径知 ...
- poj 1328 Radar Installation (简单的贪心)
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42925 Accepted: 94 ...
- POJ 1328 Radar Installation 贪心 A
POJ 1328 Radar Installation https://vjudge.net/problem/POJ-1328 题目: Assume the coasting is an infini ...
- poj 1328 Radar Installation(nyoj 287 Radar):贪心
点击打开链接 Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43490 Accep ...
- poj 1328 Radar Installation【贪心区间选点】
Radar Installation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other) ...
- poj 1328 Radar Installation(贪心)
Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...
- Radar Installation(POJ 1328 区间贪心)
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 68578 Accepted: 15 ...
- Radar Installation POJ - 1328
Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...
- Radar Installation POJ - 1328(贪心)
Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...
随机推荐
- 实现一个跨平台的mysock库(windows、linux)
源码下载 1.首先确定自己的操作系统为32位还是64位: root@bfq:~/mysock# uname -a Linux bfq 3.11.0-26-generic#45~precise1- ...
- android153 笔记 5
52. Linux中跨进程通信的几种方式 . linux编程全部是基于文件管理的. # 管道( pipe ):管道也是一个文件,一个进程负责读一个进程负责写,管道是一种半双工(2边可以通信但是不能是同 ...
- java_ExecutorService, CompletionService - 有返回值并行工作方式
package com.demo.test3; import java.util.ArrayList; import java.util.List; import java.util.Random; ...
- TortoiseGit安装和使用的图文教程
ortoiseGit是Windows下不错的一款Git客户端工具,在Mac下推荐使用sourcetree.下面就介绍一下TortoiseGit安装和使用的方法. 安装TortoiseGit并使用它需要 ...
- oracle时间格式转换问题 ORA-01810: format code appears twice--转
今天在做报表查询的时候Oracle报错: 信息为 ORA-01810: format code appears twice 原因:由于想java一样转化时间格式,但是Oracle中是不区分大小写的,所 ...
- Windows下用Eclipse搭建C/C++开发环境
本文假定你已经熟悉Java,Eclipse的安装,并能顺利启动和运行Eclipse.此外因为各软件版本在不断更新,有些地方可能不准确,以最新的.原文资料为准. 距上一次写和调C++程序,已经5.6年了 ...
- 双系统下,Windows如何正确删除Linux系统
一般电脑装了双系统,特别是Windows加Linux的电脑,不可以在Windows中直接删了linux,因为一般安装linux的时候,grub都写进了mbr,直接删了Windows就进不了了,除非原来 ...
- U盘安装Debian 7
网上看到好多使用U盘安装的教程,齐说不一.实践是检验真理的标准,Try it ! 下载系统镜像:http://cdimage.debian.org/cdimage/release/current/am ...
- SQL Server批量更新数据
项目中有一个位置需要批量插入几万条数据,批量insert等待时间简直...用SqlBulkCopy后,之前需要1分钟左右的sql现在只要一眨眼(真的只要一眨眼) 稍后这个功能要加到另外一个项目中,另外 ...
- spark RDD的元素顺序(ordering)测试
通过实验发现: foreach()遍历的顺序是乱的 但: collect()取到的结果是依照原顺序的 take()取到的结果是依照原顺序的 为什么呢???? 另外,可以发现: take()取到了指定数 ...
