喷水装置(二)

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
描述
有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。
输入
第一行输入一个正整数N表示共有n次测试数据。
每一组测试数据的第一行有三个整数n,w,h,n表示共有n个喷水装置,w表示草坪的横向长度,h表示草坪的纵向长度。
随后的n行,都有两个整数xi和ri,xi表示第i个喷水装置的的横坐标(最左边为0),ri表示该喷水装置能覆盖的圆的半径。
输出
每组测试数据输出一个正整数,表示共需要多少个喷水装置,每个输出单独占一行。
如果不存在一种能够把整个草坪湿润的方案,请输出0。
样例输入
2
2 8 6
1 1
4 5
2 10 6
4 5
6 5
样例输出
1
2

思路:这是一道区间覆盖问题,关键就在于将其转化为 区间覆盖类型。需要求出每个喷头的实际覆盖长度。公式l=sqrt(r*r-(h/2)*(h/2));

由此算出每一个喷头覆盖区间的两端点,再利用区间覆盖做题就可以了。其中 要注意利用这个公式计算的时候 所得的l是一个实数,不能用整形。

ac代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define MAX 10010
using namespace std;
struct node
{double left,right;
}edge[MAX];
bool cmp(node a,node b)
{if(a.left==b.left)return a.right>b.right;elsereturn a.left<b.left;
}
int main()
{int Tcase;scanf("%d",&Tcase);while(Tcase--){int n;int w,h,m=0;scanf("%d%d%d",&n,&w,&h);for(int i=1;i<=n;i++){int x,r;scanf("%d%d",&x,&r);if(r<h/2)//筛选符合条件的边。 continue;double l;//有效覆盖区间;l=sqrt(r*r-(h/2.0)*(h/2.0));edge[++m].left=x-l;edge[m].right=x+l;if(edge[m].left<0)edge[m].left=0;if(edge[m].right>w)edge[m].right=w; }sort(edge+1,edge+m+1,cmp);double len=0;int cnt=0;for(int i=1;i<=m;i++)//区间覆盖 {double temp=len; for(int j=i;j<=m;j++){if(edge[j].left<=len&&edge[j].right>len){temp=max(temp,edge[j].right);}}if(temp>len){len=temp;cnt++;}}if(len-w<0)printf("0\n");elseprintf("%d\n",cnt);}return 0;
} 

NYOJ--12--喷水装置(二)相关推荐

  1. 基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题...

    1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1, ...

  2. NYOJ 12 喷水装置(二)

    喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的 ...

  3. 小米笔记本 12.4 二合一 评测

    屏幕方面,这块 12.4 英寸 IPS LCD 触摸屏还是可圈可点的,分辨率为 2,560 x 1,600 像素,峰值亮度为 500 尼特,100% DCI-P3 色域,覆盖了一层康宁大猩猩玻璃. 这 ...

  4. 【新书推荐】【2019.12】二十一世纪的人工智能(第三版)

    [2019.12]二十一世纪的人工智能(第三版)Artificial Intelligence in the 21st Century 3rd Edition,共750页. 如果需要电子版,请联系QQ ...

  5. 贪心算法之——喷水装置二(nyoj12)

    题目描述: 喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000) ...

  6. NYOJ 6 喷水装置(一) 贪心算法 之 区间覆盖问题

    喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为 ...

  7. 空间谱专题12:二维测向的基本方法

    作者:桂. 时间:2017-10-01  16:50:08 链接:http://www.cnblogs.com/xingshansi/p/7617442.html 前言 圆阵.面阵.L阵.十字阵.V形 ...

  8. NYOJ 6 喷水装置(一)

    喷水装置(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心 ...

  9. 【愚公系列】2021年12月 二十三种设计模式(七)-桥接模式(Bridge Pattern)

    文章目录 前言 一.桥接模式(Bridge Pattern) 二.使用步骤 角色 示例 总结 优点 缺点 使用场景 前言 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分 ...

  10. nyoj 12(区间覆盖)

    贪心策略是将左端点从小到大排序,选择右端点,使得右端点尽量覆盖的最远 AC: #include<stdio.h> #include<algorithm> #include< ...

最新文章

  1. html页面布局名称,HTML页面模块的常用命名
  2. 记一次Linux系统内存占用较高得排查
  3. xps数据怎么导出为txt_使用ExportAsFixedFormat方法将数据导出到PDF或XPS.docx
  4. 【沟通的艺术】故事大王
  5. 自动化测试如何解决验证码的问题
  6. 戴尔服务器板载系统raid管理,戴尔PowerEdge RAID控制卡使用示例(PERC H710P为例)
  7. SVN的trunk branch tag
  8. android设置存储,在android应用程序中存储用户设置的最合适方法是什么?
  9. mysql启动错误处理
  10. 手写Maven的archetype项目脚手架
  11. python脚本清除linux cron中过期的定时计划
  12. 学会这一方法,轻松实现Excel批量转PDF,快来码住
  13. 一文带你了解云原生安全 | 云安全解决方案(CASB、CSPM、CWPP、CNAPP)
  14. NetLimiter(网络限速-对付流氓上传)
  15. Kubernetes(K8S)入门到运维 ( 六) Helm与功能组件及证书年限
  16. 如何在 Linux 中查找一个文件
  17. 技术总监被开除了....
  18. 【POJ3585】Accumulation Degree 二次扫描与换根法
  19. Simulink---Extrinsic函数绘图
  20. 855 AIMA学习笔记(by菜菜子)

热门文章

  1. LeetCode刷题——88. 合并两个有序数组
  2. 机器学习入门——详解主成分分析
  3. 人工神经网络到底能干什么?到底在干什么?
  4. 一站式学习 Linux C语言编程
  5. 解析内、外职业发展规划秘诀
  6. 优化理论05----最速下降法、最速下降法思想、python实现
  7. 5.10 Memory Networks 记忆网络的应用与方法
  8. PyTorch:nn操作
  9. PyTorch:模型训练-模型参数parameters
  10. C语言获取系统时间的函数