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 ...
随机推荐
- MAC OS===>IntelliJ IDEA__ant__zookeeper源码编译
1:配置ant环境 https://archive.apache.org/dist/ant/binaries/ 官网下载文件 1.10.0以上需要JDK1.8以上 否则会报 Exception i ...
- java web 之Session
1.Session简单介绍 由于Http是无状态的协议,所以服务端需要记录用户的状态时,就需要某种机制来识别具体的用户,实现这个机制的方式就是session. 典型的场景比如购物车,当你点击下单按钮时 ...
- 实现移动端touch事件的横向滑动列表效果
要实现手机端横向滑动效果并不难,了解实现的原理及业务逻辑就很容易实现.原理:touchstart(手指按下瞬间获取相对于页面的位置)——>touchmove(手指移动多少,元素相应移动多少). ...
- Android输入法架构学习总结
此文为本人学习输入法之后所做的一个总结报告.与大家分享. 安卓输入法框架(Input Method Framework)IMF 一.输入法框架简介 自Android平台1.5版本以后,Google开放 ...
- Easyui datagrid加载数据时默认全选的问题
问题描述: 最近使用 Easyui datagrid 展示数据,之前一直使用很正常,今天出现了一个怪异问题 加载数据后,只要点击选中列 ck 的任意行或多行,再刷新时整个datagrid的所有数据都 ...
- 【Udacity】异常值检测/删除
Outlier Detection
- 第三次Scrum
1.小组成员 周 斌舒 溢许嘉荣唐 浩黄欣欣廖帅元刘洋江薛思汝 2.小组第三次冲刺完成情况 github仓库小组的第三次任务是完成体系结构环境图和系统原型图.在体系结构设计中,分为上级系统----把目 ...
- Django后台注册
- Java中的volatile关键字的功能
Java中的volatile关键字的功能 volatile是java中的一个类型修饰符.它是被设计用来修饰被不同线程访问和修改的变量.如果不加入volatile,基本上会导致这样的结果:要么无法编写多 ...
- Linux文件系统检查错误
我们的Linux系统在无法启动时候,通常需要进入单用户模式下进行修改一些配置文件,或调整一些参数方可.但是在进入单用户模式后,我们的/文件系统是只读模式,无法进行修改,那么这个时候我们就需要用到一条命 ...