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\)轴上都有一条线段(或者是点)可以覆盖它。

于是问题就成了,用最少的点覆盖所有的线段。

把线段按右端点排序,从左往右扫描。对于每一个右端点对应的区间,如果它没有被前一个安排过的点覆盖,那么就为它安排一个点。

解释两个东西:

  1. 为什么只检查前一个安排过的点,因为如果前一个安排过的点不能照看它,它也不可能被更左的端点覆盖
  2. 是什么保证了它是对的?这样决策,保证了满足当前需求(覆盖所有左边的区间),为后面的需求(右边需要覆盖的区间)产生了最优的状态集合,其他的状态不可能比它还优。是一种决策包容性,这种决策对未来的集合是最大的。

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 雷达安装 解题报告的更多相关文章

  1. 洛谷P1325 雷达安装

    题目 考虑对于一个小岛,如果有雷达可以覆盖它,则这些雷达肯定在一个区间里,则原题内容则变为区间选点问题 #include <bits/stdc++.h> using namespace s ...

  2. 落谷p1325雷达安装(计算几何)

    传送门 //p1325雷达安装 //很明显雷达应该安装在海岸线上 //而为了满足一个点被覆盖那在区间[x - sqrt(d ^ 2 - y ^ 2), x + sqrt(d ^ 2 - y ^ 2)] ...

  3. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  4. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  5. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  6. 洛谷 P3349 [ZJOI2016]小星星 解题报告

    P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...

  7. 洛谷 P3177 树上染色 解题报告

    P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...

  8. 洛谷 P4705 玩游戏 解题报告

    P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...

  9. 洛谷 P1272 重建道路 解题报告

    P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...

随机推荐

  1. linux设置定时任务调用接口

    1.设置目录 cd /var/spool/cron 2.编辑文件(当前登录用户,不一定是root) vim root 3.添加内容 0 0 * * * wget http://192.144.141. ...

  2. PHP导出Excel,设置表格样式,填充颜色等较为复杂样式

    // 注:只是在此做下记录,有兴趣的可以参考,不做实际教程文档 <?php //引入Li类对数据进行操作include_once('./Li.php');//引入Excel类库对对数据进行操作i ...

  3. MySQL数据库之数据类型和完整性约束

    补充: select * from mysql.user #显示出来乱了 select * from mysql.user\G #加了\G后一行一行显示了 一.数据类型:分不同种类去存不同类型的数据 ...

  4. this指向问题(箭头函数没有this)

    全局环境下,指向windows console.log(this.document === document); // true 函数上下文调用 function f1(){ return this; ...

  5. [Ubuntu] <uptime>命令

    uptime 命令 就是查看系统启动时间的,前几个大家应该都很熟悉:当前时间.系统启动时间.正在登陆的用户数 最后的三个数字,分别代表过去 1分钟  5分钟  15分钟  的平均负载(Load Ave ...

  6. Power Designer逆向工程导入Oracle表,转为模型加注释

    1.打开PowerDesigner ——文件——Reverse Engineer——DataBase 2.选择所要连接数据库版本,此处使用的是oracle version 11g. 3.点击红色区域, ...

  7. Cesium开发添加entity无法显示

    无代码报错,js查询entity数量发现确实添加进去了.但是在底图上就是不显示. 有可能是跨域产生的问题.打开开发者工具Console栏.查看是不是存在跨域错误. 解决跨域后entity正常加载.

  8. hadoop的safemode 安全模式

    hadoop启动检查副本块数,就会进入safemode safemode的相关情况 虽然不能进行修改文件的操作,但是可以浏览目录结构.查看文件内容的. 在命令行下是可以控制安全模式的进入.退出和查看的 ...

  9. Python中import的as语法

    在Python中,如果import的语句比较长,导致后续引用不方便,可以使用as语法,比如: import dir1.dir2.mod # 那么,后续对mod的引用,都必须是dir1.dir2.mod ...

  10. Java访问控制

    转自:菜鸟教程