独立博客被硬盘保护干掉了真不爽啊……

原题:

外星人指的是地球以外的智慧生命。外星人长的是不是与地球上的人一样并不重要,但起码应该符合我们目前对生命基本形式的认识。比如,我们所知的任何生命都离不开液态水,并且都是基于化学元素碳(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】遥感监测的更多相关文章

  1. 【文文殿下】P3737 [HAOI2014]遥感监测

    题解 显然可以把每个观测点,认为是x轴上的一段区间.问题就转换为了:对于x轴上的若干个区间,选取尽可能少的点,使得所有区间都有至少一个点. 这是一个相当经典的贪心问题. 代码如下: #include& ...

  2. 【bzoj5166】[HAOI2014]遥感监测 贪心

    题目描述 给出平面上 $n$ 个圆,在x轴上选出尽可能少的点,使得每个圆中至少有一个点.求这个最小点数. 输入 第1行: N R 分别表示激光点的个数和射电望远镜能检测到的半径 第2~N+1行: Xi ...

  3. HAOI2014 遥感监测

    题目链接:戳我 比较水的一个题,直接处理点,找在直线上的可以覆盖到它的区间,然后做最小线段覆盖即可: 代码如下: #include<iostream> #include<cstdio ...

  4. 林业资源遥感航拍监测GIS系统

    航拍监测.遥感监测在林业有害生物(松材线虫病监测).森林防火监测.森林滥砍滥伐.林地侵占.林地违规开发监测等方面应用,将大大提升林业资源监测水平, 针对已有森林资源大量流失,滥砍滥伐现象普遍存在的事实 ...

  5. 关于TM影像各波段组合的简介

    321:真彩色合成,即3.2.1波段分别赋予红.绿.蓝色,则获得自然彩色合成图像,图像的色彩与原地区或景物的实际色彩一致,适合于非遥感应用专业人员使用. 432:标准假彩色合成,即4.3.2波段分别赋 ...

  6. 视频透雾原理加视频增强Retinex算法介绍

    (本文转自:http://www.syphong.cn/52-1.html#) 视频透雾原理加视频增强Retinex算法介绍 -上海凯视力成 钟建军 一. 视频增强的背景 视觉信息是人类获得外界信息的 ...

  7. 第四周:卷积神经网络 part 3

    第四周:卷积神经网络 part 3 视频学习 语义分割中的自注意力机制和低秩重建 语义分割(Semantic Segmentation) 概念:语义分割是在像素级别上的分类,属于同一类的像素都要被归为 ...

  8. <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  9. 分享|智慧环保-生态文明信息化解决方案(附PDF)

    内容摘要: 生态文明建设被提到前所未有的战略高度,我们既要绿水青山,也要金山银山.宁要绿水青山,不要金山银山,而且绿水青山就是金山银山.要正确处理好经济发展同生态环境保护的关系,牢固树立保护生态环境就 ...

随机推荐

  1. OOP⑺

    1.多态和instanceof 都是去买东西,但是根据我们给别人金额的不同,得到不同的结果!!!! 生活中的多态! 操作是否一致? 一致! 都是买东西! 什么不一样?? 01.消费金额不一样 02.因 ...

  2. day039 数据库索引

    今日内容: 1.为什么要有索引 简而言之,索引出现的意义是为了更方便,更快速的查询数据. 什么是索引 索引在mysql中也叫''键''或'key'(primary key unique key,ind ...

  3. 深入理解java虚拟机---虚拟机工具jhat(十六)

    jhat JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器 ...

  4. 使用ext httpProxy代理获取列表但列表展示不全的问题解决

    今天项目中遇到一个奇葩的事情,使用ext的jsonstore通过httpproxy代理想要获取一个列表,页面显示是有五条数据的但是却只展示了2条,于是各种排查,后台确定无误后开始检查前台,发现浏览器中 ...

  5. day 71-72 cookie 和session

    拓展知识   request---->请求信息 属性: request.path       # 获取访问文件路径 request.method属性 #获取请求中使用的HTTP方式(POST/G ...

  6. HIVE点滴:选择两个字段时distinct位置的影响

    当选择两个字段时,例如:"select XX1, XX2 from tb; ",那么将distinct放在前一个字段XX1之前和放在后一个字段XX2之前,结果有什么不同呢? 先说结 ...

  7. SAP ABAP: Error Message "Statement already exist" when creating a function module.

    https://archive.sap.com/discussions/thread/1089149     First check above link where my problem is so ...

  8. [转]HBASE 二级索引

    1.二级索引的核心思想是什么?2.二级索引由谁来管理?3.在主表中插入某条数据后,hbase如何将索引列写到索引表中去?4.scan查询的时候,coprocessor钩子的作用是什么?5.在split ...

  9. 【转载】 详解BN(Batch Normalization)算法

    原文地址: http://blog.csdn.net/hjimce/article/details/50866313 作者:hjimce ------------------------------- ...

  10. 设计简单算法体验Vivado HLS的使用

    前言 本文主要讲解了使用Vivado HLS设计简单C语言的二选一选择器算法的硬件HLS开发的全流程,包括工程创建-算法验证和仿真-算法综合-RTL仿真-IP封装等步骤. 参考网站: http://b ...