题解 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 ...
随机推荐
- Shiro实战教程-刘志敏-专题视频课程
Shiro实战教程-62人已学习 课程介绍 本教程只介绍基本的 Shiro 使用,不会过多分析源码等,重在使用. 适用人群: 1.了解基于Servlet进行Web应用开发 2.了解Spr ...
- CODING DevOps 系列第五课:微服务测试——微服务下展开体系化的微服务测试
微服务测试的痛点与挑战 这张图可以形象地展示单体服务和微服务的对比,单体应用就像左边巨大的集装箱,软件模块和应用都包括其中:而微服务就像是由一个小集装箱组成,微小的服务组成一个庞大.完整的系统.单体服 ...
- Cannot instantiate the type Map
今天在使用Map中犯了个低级错误,记录一下: 打算使用map为一个视频List观看记录的统计标识,key为vid,value默认为false,当该key已经统计,标识value为true,初始实例化M ...
- mybatis面试入门
第一步创建一个java project 导入mybatis需要的jar包,创建与数据库一一对应的javabean对象 第二步:创建mybatis的配置文件 sqlMapconfig.xml 第三步:创 ...
- 微信小程序点击保存图片到本地相册——踩坑
在微信小程序中要保存图片到本地相册,需要获取相册权限. 总之整个功能实现下来需要如下几个小程序的API:wx.getSetting,wx.authorize,wx.openSetting,wx.dow ...
- ubuntu18.04安装nodejs最新版、指定版 12.x 14.x
今天准备在 ubuntu 服务器里面安装 nodejs 版本,ubuntu 18.04 仓库 nodejs 默认是 8.x 版本. 1. 通过 apt 安装 nodejs 在 Ubuntu 18.04 ...
- Python实用笔记——错误处理
让我们用一个例子来看看try的机制: try: print('try...') r = 10 / 0 print('result:', r) except ZeroDivisionError as e ...
- DOM-BOM-EVENT(2)
2.获取DOM元素的方法 2.1.getElement系列 documentElementById 通过id获取元素 <div id="box"></div> ...
- ADAS感知设计
ADAS传感器融合 0.传感器标定 首先标定传感器.一般可以精度高的传感标定用精度低一个数量级的传感器,如用激光雷达标定毫米波雷达. 毫米波雷达标定:可以采用激光雷达对毫米波雷达进行标定.选取一个纹理 ...
- pl/sql案例
项目生命周期: 瀑布模型 拿到一个项目后,首先:分析需要用到的SQL语句: 其次:分析需要定义的变量初始值是多少,怎么得到最终值: 案例一: 统计每年入职的员工数量以及总数量: SQL语句:selec ...