洛谷 P1325 雷达安装 解题报告
P1325 雷达安装
题目描述
描述:
假设海岸线是一条无限延伸的直线。它的一侧是陆地,另一侧是海洋。每一座小岛是在海面上的一个点。雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d。你的任务是建立尽量少的雷达站,使所有小岛都在扫描范围之内。
数据使用笛卡尔坐标系,定义海岸线为x轴。在x轴上方为海洋,下方为陆地。
输入输出格式
输入格式:
第一行包括2个整数n和d,n是岛屿数目,d是雷达扫描范围。
接下来n行为岛屿坐标。
输出格式:
一个整数表示最少需要的雷达数目,若不可能覆盖所有岛屿,输出“-1”。
输入输出样例
输入样例#1:
3 2
1 2
-3 1
2 1
输出样例#1:
2
样例1如图所示
说明
\(n \le 1000,d \le 20000\)
\(|x_i| \le 2 \times 10^6,0 \le y_i \le 20000\)
贪心。
因为雷达只能安排在\(x\)轴上,我们可以把问题进行转换。
每一个岛屿在\(x\)轴上都有一条线段(或者是点)可以覆盖它。
于是问题就成了,用最少的点覆盖所有的线段。
把线段按右端点排序,从左往右扫描。对于每一个右端点对应的区间,如果它没有被前一个安排过的点覆盖,那么就为它安排一个点。
解释两个东西:
- 为什么只检查前一个安排过的点,因为如果前一个安排过的点不能照看它,它也不可能被更左的端点覆盖
- 是什么保证了它是对的?这样决策,保证了满足当前需求(覆盖所有左边的区间),为后面的需求(右边需要覆盖的区间)产生了最优的状态集合,其他的状态不可能比它还优。是一种决策包容性,这种决策对未来的集合是最大的。
Code:
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstdlib>
const int N=1010;
double d;
struct node
{
double x,y,r;
bool friend operator <(node n1,node n2)
{
return n1.r<n2.r;
}
}loc[N];
int n;
void init()
{
int flag=0;
scanf("%d%lf",&n,&d);
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&loc[i].x,&loc[i].y);
if(d>=loc[i].y)
loc[i].r=sqrt(d*d-loc[i].y*loc[i].y)+loc[i].x;
else
flag=1;
}
if(flag) {printf("-1\n");exit(0);}
std::sort(loc+1,loc+1+n);
}
double get(double x1,double y1,double x2,double y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
void work()
{
double las=loc[1].r;
int ans=1;
for(int i=2;i<=n;i++)
{
if(get(loc[i].x,loc[i].y,las,0)>d)
ans++,las=loc[i].r;
}
printf("%d\n",ans);
}
int main()
{
init();
work();
return 0;
}
2018.7.12
洛谷 P1325 雷达安装 解题报告的更多相关文章
- 洛谷P1325 雷达安装
题目 考虑对于一个小岛,如果有雷达可以覆盖它,则这些雷达肯定在一个区间里,则原题内容则变为区间选点问题 #include <bits/stdc++.h> using namespace s ...
- 落谷p1325雷达安装(计算几何)
传送门 //p1325雷达安装 //很明显雷达应该安装在海岸线上 //而为了满足一个点被覆盖那在区间[x - sqrt(d ^ 2 - y ^ 2), x + sqrt(d ^ 2 - y ^ 2)] ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷 P4597 序列sequence 解题报告
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- 洛谷 P3349 [ZJOI2016]小星星 解题报告
P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...
- 洛谷 P3177 树上染色 解题报告
P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...
- 洛谷 P4705 玩游戏 解题报告
P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...
- 洛谷 P1272 重建道路 解题报告
P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...
随机推荐
- LUA对象
Rectangle = {width = , height = , area = }; function Rectangle:new(o, width, height) o = o or {}; se ...
- 我们一起学习WCF 第八篇回调函数
什么是回调函数? 一个简单的例子:小明想要在京东购买一件商品.他会登陆网站选好自己的商品.然后他把这件商品放在购物车,然后开始付钱(这个表示触发,不付钱不发货(排除货到付款)).然后京东的人员收到了小 ...
- SQL Server 2008 R2 链接 Oracle 10g
首先sqlserver 链接oracle可以通过两个访问接口: “MSDAORA” 和“OraOLEDB.Oracle” 1.“MSDAORA”访问接口是由Microsoft OLE DB Provi ...
- Java 注解 初探 (一)
自JDK1.5之后,就开始出现注解.想要了解注解的来源和注解的用法,通过搜索引擎大都是针对某一个注解的解释,很难找到关于注解系列的文章,便自己看下. 基于Annotation的注释,说明Annotai ...
- commons fileupload上传报错
这个问题困扰我好久了一直没有找到解决方法,先记录下来. 生产环境(简称A)上老是出错,而测试环境(简称B)一切正常. 我们的框架是JAVA语言编写,基于struts1技术总监自己搭的框架,我在stru ...
- info信息的获取
一.绝对路径(_SERVER[“SCRIPT_FILENAME”])这个是最常用,也是最有效的一个办法,找到phpinfo()页面可以直接找到网站的绝对路径,对于写shell和信息搜集是必不可少的.二 ...
- selenium自动化之定位多个元素
前面我们讲的都是如何定位单个元素,下面讲下怎么去定位多个元素,并且输出文本. 以百度为例:获取标红的这一组元素的文本 这里我用到的是xpath来定位的://div[@id="u1" ...
- 第六章P2P技术及应用
第六章P2P技术及应用 P2P技术在我们日常生活中非常实用,例如我们常用的QQ.PPLive.BitTorrent就是基于P2P技术研发.下面将本章中的重点内容进行归纳. 文章中的Why表示产生的背景 ...
- socket_tcp协议_loadrunner测试
1.lrs_create_socket("socket0", "TCP", "RemoteHost=127.0.0.1:8888", Lrs ...
- Xcode 6添加模板无效
最近发现从Xcode 5拷贝来的模板在Xcode 6上是OK的,但是自己自定义的却不行,一直使用的是自定义的基类模板,最后发现原因是没有在 TemplateInfo.plist 中注册自定义的模板,注 ...