POJ 1328 Radar Installation(很新颖的贪心,区间贪心)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 106491 | Accepted: 23648 |
Description
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 is terminated by a line containing pair of zeros
Output
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轴为分界,y>0部分为海,y<0部分为陆地,给出一些岛屿坐标(在海中),再给出雷达可达到范围,雷达只可以安在陆地上,问最少多少雷达可以覆盖所以岛屿。 分析:
开始是这么想的:把二维抽象位1维的,只有x轴,因为岛屿都投影在x轴上,第一个雷达站在最左边是第一个岛屿,从头开始遍历这些岛屿,在第一个雷达站覆盖范围内的就
跳过,不在的就新建立一个雷达站,要求第二个雷达站的左边界刚好在没有覆盖的岛屿上(注意抽象为1维)
试了一下,wa了,这么做虽然可以减少雷达站的数量,但是肯定步数最优的 正确的做法:
对每个岛屿,要有雷达覆盖的话,那么其在x轴上面必须要有一共区间,雷达站必须在这个区间内才能覆盖该岛屿
求出每个岛屿的区间,如果有一些区间重叠的话,那么一共雷达站就能覆盖多个岛屿呀
将这些区间按照右边界大小排序(升序)
第一个雷达站放在第一个区间的右边界,如果第二个岛屿的左边界大于第一个岛屿的右边界,说明第一个雷达不能覆盖第二个岛屿,需要新建一个雷达站(在第二个岛屿的右边界)
如果第二个岛屿的左边界小于或者等于第一个岛屿的左边界的话,那么说明在第一个岛屿右边界建立的雷达站既能覆盖第一个岛屿也能覆盖第二个岛屿,所以跳过此岛屿,
下面依次类推
code:
#include<stdio.h>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <math.h>
#include <cstdlib>
#include <queue>
using namespace std;
#define max_v 1005
struct node
{
double x1,x2;
}p[max_v];
bool cmp(node a,node b)
{
return a.x2<b.x2;//岛屿右边界升序排序
}
int main()
{
int n,d,x,y;
int c=;
while(cin>>n>>d,n&&d)
{
int f=;
for(int i=;i<n;i++)
{
cin>>x>>y;
if(y>d)
f=;
double x1=x-sqrt(d*d*1.0-(y*y*1.0));
double x2=x+sqrt(d*d*1.0-(y*y*1.0));
p[i].x1=x1;
p[i].x2=x2;//得到岛屿左右边界
}
if(f==)
{
printf("Case %d: -1\n",c++);//存在岛屿到x的垂直距离大于雷达覆盖距离
continue;
}
sort(p,p+n,cmp);
int sum=;
int cur=;
for(int i=;i<n;i++)
{
if(p[i].x1>p[cur].x2)
{
cur=i;
sum++;
}
}
printf("Case %d: %d\n",c++,sum);
}
return ;
}
POJ 1328 Radar Installation(很新颖的贪心,区间贪心)的更多相关文章
- 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
题目地址: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(贪心)
Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...
- POJ 1328 Radar Installation 【贪心 区间选点】
解题思路:给出n个岛屿,n个岛屿的坐标分别为(a1,b1),(a2,b2)-----(an,bn),雷达的覆盖半径为r 求所有的岛屿都被覆盖所需要的最少的雷达数目. 首先将岛屿坐标进行处理,因为雷达的 ...
- 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【贪心】
POJ 1328 题意: 将一条海岸线看成X轴,X轴上面是大海,海上有若干岛屿,给出雷达的覆盖半径和岛屿的位置,要求在海岸线上建雷达,在雷达能够覆盖全部岛屿情况下,求雷达的最少使用量. 分析: 贪心法 ...
- poj 1328 Radar Installation(贪心+快排)
Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...
随机推荐
- IntelliJ IDEA+Mysql connecter/j JDBC驱动连接
在IntelliJ IDEA中用connecter/j jdbc驱动连接MYSQL 以下是解决过程,待整合...有点懒,有空再改 官方文档:https://www.cnblogs.com/cn-chy ...
- ORA-12541:TNS-12560:ORA-12518:ORA-28040:ORA-01017
说明 环境(参考): Oracle 12c SQL Developer/Navicat Premium(64位)连接数据库 后续出现的错误代码: ORA-12541: no listener TNS- ...
- 用c+libcurl+PCRE写爬虫2--好用的正则表达式
写爬虫最重要的就是正则表达式的处理(爬出来的数据的筛选,清洗,过滤等操作). 通过一篇文章 http://blog.csdn.net/quaful/article/details/6460880 来确 ...
- 虚拟机下centos时间不正确的方便解决方法
就是用NTP了,通过外部的服务同步时间. ntpdate us.pool.ntp.org | logger -t NTP 如果没有ntpdate ,可以使用 yum install ntpdate 进 ...
- 用户登录时,获取用户ip地址
使用django来获取用户访问的IP地址,如果用户是正常情况下通过request.META['REMOTE_ADDR'] 可以获得用户的IP地址.但是有些网站服务器会使用ngix等代理http,或者 ...
- 动态设置热区coords的坐标
window.onresize = adjuest; function adjuest(){ var picw = $(".imgbox img").width(); var pi ...
- Swiper正方体,左右翻转轮播图
今天的轮播图,和往常的有一点点不同哦!可以说是有一点点的3D效果!因为他在运动的时候,是以正方体的样子左右滚动的; 先引插件: <link rel="stylesheet" ...
- Javascript 多物体淡入淡出(透明度变化)
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- 关于Array的操作
使用Array创建数组 // 使用Array 构造函数 var colors = new Array(); // 预先给数组项数量 var colors = new Array(20); // 向Ar ...
- sharePoint查看与更改用户登录账号
PS D:\deployScript> $user=(Get-SPUser -IDENTITY "i:0e.t|xmssts|zhangshan" -Web http://t ...