题解 UVA1193 Radar Installation
原题
思路
分析
因为半径d已经确定,所以对于每个点,我们可以算出它在x 轴上的覆盖位置线段LR,如图。

此问题便转为:
对于 n 个区间,每个区间内至少有1个点,求最少点数。
算法
我们可以将所有转化后的区间按左端点大小排序,然后记录上个点位置 las,对于每个点,有两种情况:
las < L , 我们必须再来一个点
las \(\ge\) L ,我们就可以尽量不再开点,而是使 las = \(\min\{las,R\}\) 来满足要求。
于是就可以贪心了!
代码
注意判无法达到情况。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#define db double
using namespace std;
const int MAXN = 1010;
int n,d,ans = 0,T = 0;
bool fail = 0;
struct island{
int x,y;
db l,r;
bool operator < (const island &b) const{
if(l == b.l) return r < b.r;
return l < b.l;
}
}isl[MAXN];
int main (){
while(scanf("%d %d",&n,&d) == 2){
if(n == 0) break;
T++;
fail = 0;
ans = 1;
if(d < 0) fail = 1;
double las;
for(int i = 0;i < n;i++){
scanf("%d %d",&isl[i].x,&isl[i].y);
if(isl[i].y > d ) fail = 1;
db temp = (db)( d * d - isl[i].y *isl[i].y );
if(temp < 0){ fail = 1; continue;}
temp = sqrt(temp);
isl[i].l = isl[i].x - temp;
isl[i].r = isl[i].x + temp;
}
printf("Case %d: ",T);
if(fail) {
printf("-1\n");
continue;
}
sort(isl+0,isl+n);
las = isl[0].r;
for(int i = 1;i < n;i++){
if(las < isl[i].l) {
ans++;
las = isl[i].r;
}
else las = min(las,isl[i].r);
}
printf("%d\n",ans);
}
return 0;
}
问题
- 在判断不可行时:
if(isl[i].x > d ) fail = 1;
- 在统计答案时:
if(las < isl[i].l) {
ans++;
las = isl[i].r;
}
//nothing
未写
else las = min(las,isl[i].r);
这样会保留不合法情况。
题解 UVA1193 Radar Installation的更多相关文章
- [POJ1328]Radar Installation
[POJ1328]Radar Installation 试题描述 Assume the coasting is an infinite straight line. Land is in one si ...
- poj 1328 Radar Installation【贪心区间选点】
Radar Installation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other) ...
- Radar Installation(贪心,可以转化为今年暑假不ac类型)
Radar Installation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other) ...
- 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(贪心区间选点+小学平面几何)
Input The input consists of several test cases. The first line of each case contains two integers n ...
- Radar Installation
Radar Installation 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=86640#problem/C 题目: De ...
- Radar Installation(贪心)
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 56826 Accepted: 12 ...
- 贪心 POJ 1328 Radar Installation
题目地址:http://poj.org/problem?id=1328 /* 贪心 (转载)题意:有一条海岸线,在海岸线上方是大海,海中有一些岛屿, 这些岛的位置已知,海岸线上有雷达,雷达的覆盖半径知 ...
- Radar Installation 分类: POJ 2015-06-15 19:54 8人阅读 评论(0) 收藏
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 60120 Accepted: 13 ...
随机推荐
- 微信小程序-页面跳转与参数传递
QQ讨论群:785071190 微信小程序页面跳转方式有很多种,可以像HTML中a标签一样添加标签进行跳转,也可以通过js中方法进行跳转. navigator标签跳转 <view class=& ...
- 定量度量程序复杂度的McCabe方法
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 请画出下面代码的 ...
- vipkid 面试经历
今天下午去了位于钟鼓楼旁边的 vipkid 研发部进行了面试,面试过程中的回答只能说一般,面试官问的问题大概分为: 实际项目的设计问题 mysql的使用优化问题 多线程与锁的问题 JVM底层原理的问题 ...
- linux网络编程-socket(2)
当客户端调用close函数的时候,服务器的read函数读到的数据是0读到文件结束通知,表示对端关闭了tcp连接 我们现实实现下面的功能: 1.tcp客户端从标准的输入流中得到输入数据发送到服务器,服务 ...
- Markdown语法说明及测试一览表
标题: Markdown语法说明及测试一览表 作者: 梦幻之心星 347369787@QQ.com 标签: [Markdown, Typora, Markdown_Nice, CSS] 目录: [Ma ...
- Java是如何实现Future模式的?万字详解!
JDK1.8源码分析项目(中文注释)Github地址: https://github.com/yuanmabiji/jdk1.8-sourcecode-blogs 1 Future是什么? 先举个例子 ...
- JDK8--02:为什么要使用lambda
lambda是一个匿名函数,我们可以把lambda理解为一个可以传递的代码(将代码像数据一样传递),可以写出更简洁更灵活的代码.首先看一下原来的匿名内部类实现方式(以比较器为例) //原来的匿名内部类 ...
- caffe训练数据流程
cifar10训练实例 1. 下载数据 # sudo sh data/cifar10/get_cifar10.sh 2. 转换数据格式为lmdb # sudo sh examples/cifar10/ ...
- git和github入门指南(3.2)
3.3.解决多人协作开发过程中的代码冲突问题 1.在多人协作开发的项目中,每次开发之前每个人最好先同步更新一下github上最新的代码,可以减少冲突的概率 git pull 2.产生冲突 目前咱们演示 ...
- 表达式计算开源组件(NCalc.NetCore)
首先,这款组件是开源的,NCalc是.net中的一个数学表达式求值程序.NCalc可以解析任何表达式并计算结果,包括静态或动态参数和自定义函数. 官网地址:http://ncalc.codeplex. ...