【HAOI2014】遥感监测
独立博客被硬盘保护干掉了真不爽啊……
原题:
外星人指的是地球以外的智慧生命。外星人长的是不是与地球上的人一样并不重要,但起码应该符合我们目前对生命基本形式的认识。比如,我们所知的任何生命都离不开液态水,并且都是基于化学元素碳(C)的有机分子组合成的复杂有机体。
ZDM实验室的天文学家们已经执著地观测ZDM-99星球十多年了,这个被称为“战神”的红色星球让他如此着迷。在过去的十多年中,他经常有一些令人激动的发现。ZDM-99星球表面有着明显的明暗变化。对这些明暗区域,天文学家们已经细致地研究了很多年,并且绘制出了较为详尽的地图,那些暗区是陆地,而亮区则是湖泊和海洋。他们一直坚信有水的地方,一定有生命的痕迹。
这天晚上的观测条件实在是空前的好,ZDM-99星球也十分明亮,不时呈现出若干个激光点,天文学家们推定这些激光点极有可能存在地球以外的智慧生命。遗憾的是仅持续很短的一段时间,这些激光点就消失了。
ZDM实验室的射电望远镜观测的区域有限,只可以遥感检测到一个半径为R的圆形区域。为了能同时能检测到所有的激光点,ZDM实验室需要要在一个水平的直线上尽快地安装多个的射电望远镜来。
不妨设,这条安放射电望远镜的水平直线为X轴,ZDM-99星球激光点就处在P1(x1,y1)P2(x2,y2) ,...... ,Pn(xn,yn)。(忽略Z坐标)

ZDM实验室的天文学家们想知道,至少需要安装多少个射电望远镜才能检测到所有激光点。
这道题规定圆的y==0那是不是可以大力贪一波啊
还是贪心的一种经典方式,如果当前点不选,在后面不会对答案造成更多的贡献
按点的x坐标排序,最左边的点没有覆盖,如果不把它覆盖掉就不满足条件,如果要覆盖,圆心在这个点的右边且圆刚好贴这这个点是最优的选择
因为如果圆心在最优选择的左边,他不会让更多的点加入覆盖(前面的都覆盖过了),也不会对答案产生更多贡献(反而会减少)
所以可以根据最左边的没有被覆盖的点直接计算出下一个圆圆心的位置
但是酱是有反例的:

这种情况只需要两个圆就够了,但是上面的做法却花了三个
所以还要再判断新添的一个圆能不能取消以前的圆
具体做法就是设v[i]表示在第i个点有没有新添一个圆,每次新添圆后往前找,如果点j在新添的圆内,就把答案减去v[j]并把v[j]设为0,直到j不在新添的圆内
证明很简单,因为只有当第i个点是最左边的没有被覆盖的点时才会新添圆,这表示第i个点的圆覆盖的都是i后面的点,所以如果j到i之间的点都在新圆内,这些点之前被j的圆覆盖,现在把j的圆删掉后包括j在内都能被i的圆覆盖,状态依旧是合法的
答案中删掉v[j]后把v[j]设为0是为了防止一个圆被删两次
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int oo=;
const double eps=1e-;
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
struct dcd{double x,y;}a[];
inline double sqr(double x){ return x*x;}
inline double dstc(dcd x,dcd y){ return sqrt(sqr(abs(x.x-y.x))+sqr(abs(x.y-y.y)));}
int n,m;
int v[];
bool cmp(dcd x,dcd y){ return (x.x==y.x)?(x.y>y.y):(x.x<y.x);}
int main(){//freopen("ddd.in","r",stdin);
cin>>n>>m;
for(int i=;i<=n;++i) a[i].x=rd(),a[i].y=rd();
sort(a+,a+n+,cmp);
dcd lst={-oo,};
int ans=;
for(int i=;i<=n;++i)
if(dstc(lst,a[i])>m){
++ans,v[i]=,lst.x=a[i].x+sqrt(sqr(m*1.0)-sqr(a[i].y));
for(int j=i-;j>= && dstc(lst,a[j])+eps<m;--j) ans-=v[j],v[j]=;
//cout<<lst.x<<endl;
}
cout<<ans<<endl;
return ;
}
【HAOI2014】遥感监测的更多相关文章
- 【文文殿下】P3737 [HAOI2014]遥感监测
题解 显然可以把每个观测点,认为是x轴上的一段区间.问题就转换为了:对于x轴上的若干个区间,选取尽可能少的点,使得所有区间都有至少一个点. 这是一个相当经典的贪心问题. 代码如下: #include& ...
- 【bzoj5166】[HAOI2014]遥感监测 贪心
题目描述 给出平面上 $n$ 个圆,在x轴上选出尽可能少的点,使得每个圆中至少有一个点.求这个最小点数. 输入 第1行: N R 分别表示激光点的个数和射电望远镜能检测到的半径 第2~N+1行: Xi ...
- HAOI2014 遥感监测
题目链接:戳我 比较水的一个题,直接处理点,找在直线上的可以覆盖到它的区间,然后做最小线段覆盖即可: 代码如下: #include<iostream> #include<cstdio ...
- 林业资源遥感航拍监测GIS系统
航拍监测.遥感监测在林业有害生物(松材线虫病监测).森林防火监测.森林滥砍滥伐.林地侵占.林地违规开发监测等方面应用,将大大提升林业资源监测水平, 针对已有森林资源大量流失,滥砍滥伐现象普遍存在的事实 ...
- 关于TM影像各波段组合的简介
321:真彩色合成,即3.2.1波段分别赋予红.绿.蓝色,则获得自然彩色合成图像,图像的色彩与原地区或景物的实际色彩一致,适合于非遥感应用专业人员使用. 432:标准假彩色合成,即4.3.2波段分别赋 ...
- 视频透雾原理加视频增强Retinex算法介绍
(本文转自:http://www.syphong.cn/52-1.html#) 视频透雾原理加视频增强Retinex算法介绍 -上海凯视力成 钟建军 一. 视频增强的背景 视觉信息是人类获得外界信息的 ...
- 第四周:卷积神经网络 part 3
第四周:卷积神经网络 part 3 视频学习 语义分割中的自注意力机制和低秩重建 语义分割(Semantic Segmentation) 概念:语义分割是在像素级别上的分类,属于同一类的像素都要被归为 ...
- <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- 分享|智慧环保-生态文明信息化解决方案(附PDF)
内容摘要: 生态文明建设被提到前所未有的战略高度,我们既要绿水青山,也要金山银山.宁要绿水青山,不要金山银山,而且绿水青山就是金山银山.要正确处理好经济发展同生态环境保护的关系,牢固树立保护生态环境就 ...
随机推荐
- java 实现简单链式队列
package com.my; /** * 链式队列 * @author wanjn * */ public class LinkedQueue { private Node head; privat ...
- java 实现单向链表
package cn.com.factroy2; /** * 可以看做是操作链表的工具类,链表的核心结构就是节点的数据结构 * @author wanjn * */ public class Sing ...
- MyBatis逆向工程:根据table生成Model、Mapper、Mapper.xml
逆向工程工具 下载地址:https://download.csdn.net/download/zhutouaizhuwxd/10779140 1.工程导入Eclipse 2.运行MainUI.jav ...
- MYSQL数据库字母数字混合字段排序问题
对MySQL数据表里的一个字符型字段排序,其内容格式为一位字母+顺序数字.数字没有前导零,长度不固定.这种含字母的数字序列,排序出来的结果和我们想要的结果是不一样的,因为它不是纯数字,只能按字符规则排 ...
- JVM运行时内存区域
JVM运行java程序时会将内存划分为若干个不同的数据区域: (1)程序计数器: 1.占用内存空间不大. 2.程序计数器相当于JVM所执行的字节码(jvm指令)的“行号指示器”,通过程序计数器的“值” ...
- Traumland--梦乡--IPA--德语
德国电影<<英俊少年>>的插曲.
- Cracking The Coding Interview 9.7
//原文: // // A circus is designing a tower routine consisting of people standing atop one another's s ...
- SQL-6查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序
题目描述 查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序CREATE TABLE `employees` (`emp_no` int(11) NOT N ...
- PE文件 01 导入表
0x01 导入表结构 数据目录表中的第二个成员标记了导入表的RVA和Size大小,由此可以定位到导入表: typedef struct _IMAGE_DATA_DIRECTORY { DWORD ...
- 【PyImageSearch】Ubuntu16.04使用OpenCV3.3.0实现图像分类
这篇博文将会展示如何采用一个预训练的深度学习网络(模型)在ImageNet的数据集并把它当作输入图像. 首先说明,运行环境为Ubuntu16.04(或者MacOS),windows暂不支持,已经编译好 ...