原题

PDF

OJ

思路

分析

因为半径d已经确定,所以对于每个点,我们可以算出它在x 轴上的覆盖位置线段LR,如图。



此问题便转为:

对于 n 个区间,每个区间内至少有1个点,求最少点数。

算法

我们可以将所有转化后的区间按左端点大小排序,然后记录上个点位置 las,对于每个点,有两种情况:

  1. las < L , 我们必须再来一个点

  2. 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;
}

问题

  1. 在判断不可行时:
if(isl[i].x > d ) fail = 1;
  1. 在统计答案时:
if(las < isl[i].l) {
ans++;
las = isl[i].r;
}
//nothing

未写

else las = min(las,isl[i].r);

这样会保留不合法情况。

最新文章

  1. java获取对应字节数的内容
  2. oracle 自定义函数
  3. python学习第十三天 -模块和包
  4. cookie简介
  5. 点击率模型AUC
  6. AM335x(TQ335x)学习笔记——Nand&amp;&amp;网卡驱动移植
  7. 微信小程序开发•模块化
  8. ArcGIS API for JavaScript 入门教程[5] 再讲数据——Map类之底图与高程
  9. mac用BootCamp装windows装完之后驱动问题
  10. Confluence 6 在升级之前
  11. Vue.js中记不住 的东西
  12. 002-一般处理程序(HttpHandler)
  13. camtasis studio 未能创建视频内存资源。
  14. 在Windows7系统上能正常使用的程序,Windows10运行后部分状态不能及时变更
  15. 高负载均衡学习haproxy之安装与配置
  16. ADO,OLEDB,ODBC,DAO,RDO的区别说明
  17. Python之pandas
  18. js大法处理富文本输入
  19. Python——零基础向-四行代码下载网页上的一张图片
  20. macOS Mojave 深色模式

热门文章

  1. Spring Boot 分离资源文件打包
  2. jni 字符串的梳理
  3. Linux-基于公私钥实现免密码登录
  4. Angular 从入坑到挖坑 - 模块简介
  5. 【Spring】内嵌Tomcat&amp;去Xml&amp;调试Mvc
  6. P5676 [GZOI2017]小z玩游戏【Tarjan】
  7. 十.总结drf视图
  8. 优化:在k8s上部署的gitlab
  9. 洛谷 P1220 关路灯 区间DP
  10. 学习笔记三:基础篇Linux基础