喷水装置(二)

时间限制: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
区间覆盖问题分成三种情况(“---”表示区间)
第一种情况
a -----------
b --------------
c -----------
此时没有能覆盖b和c之间的区域
第二种情况
 a -----------
b ------------
c -------------
此时需要选择a,b,c三个区间
第三种
 a -----------
b -------------
c ---------------
此时选择a,c两个区间就能覆盖住,不需要选择3个区间
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std; struct Segment{
double first,second;
Segment(double first_ = , double second_ = ):first(first_),second(second_){}
bool operator < (const Segment& a) const{
if(first!=a.first) return first < a.first;
else return second > a.second;
}
}; int main(){
int N;
cin >>N;
for(int icase = ; icase < N; icase ++ ){
int n;
double w,h;
cin >> n >>w >> h;
vector<Segment> segments;
for(int i = ; i < n; ++ i){
double x,r;
cin >> x >>r;
if(*r >= h){
segments.push_back(Segment(x - sqrt(*r*r-h*h)/,x + sqrt(*r*r-h*h)/));
}
}
sort(segments.begin(),segments.end());
int cnt = ;
double left = segments[].first, right = segments[].second, prevRight = ;
for(int i = ; i < segments.size(); ++ i){
if(segments[i].first > right ){ // 第一种情况
cnt = ;
break;
}else if(segments[i].first >= prevRight){ //第二种情况
cnt++;
prevRight = right;
right = segments[i].second;
}else if(segments[i].first < prevRight && segments[i].second > right){ //第三种情况
right = segments[i].second;
}
if(right >= w) break;
}
if(left<= && right >= w) cout<<cnt<<endl;
else cout<<<<endl;
}
}
 
 

最新文章

  1. 写入文件(txt格式)
  2. python 最佳入门实践
  3. mybatis+spring的简单介绍学习
  4. 学习Learn Python The Hard Way 前言中的一段话,可与君共勉
  5. ubuntu find方法
  6. Android Cursor类的概念和用法
  7. mysqladmin在SuSE linux系统中--sleep參数使用不准确问题
  8. Access to the temp directory is denied. Identity &#39;NT AUTHORITY\NETWORK SERVICE&#39; under which XmlSerializer is running does not have sufficient permiss
  9. Django框架全面讲解
  10. 一步一步学MySQL-日志文件
  11. Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】
  12. SSM-Spring-19:Spring中JdbcTemplate
  13. python操作随笔
  14. 最短路径HDU3790(Dijkstra)
  15. fortran语言调用fortran写的dll
  16. &lt;自动化测试方案_2&gt;第二章、自动化测试是什么?(What)
  17. 【转】cookie如何共享到各个浏览器
  18. AI-restful接口写法
  19. Shell脚本笔记(七)控制Shell脚本
  20. 【阅读笔记】《C程序员 从校园到职场》第六章 配置文件,makefile 文件 (Part 2)

热门文章

  1. 谈谈Delphi中的类和对象1---介绍几个概念 &amp;&amp; 对象是一个地地道道的指针
  2. Delphi基础语法的学习笔记和注意事项总结
  3. 【JAVA多线程问题之死锁】
  4. 【131031】&lt;meta http-equiv=...&gt; 的功能
  5. BOOL in Object-C
  6. [译] Extending jQuery Part1 Simple extensions
  7. SVN-简要说明
  8. CentOS7安装PHP简易步骤
  9. 分享Kali Linux 2016.2第45周镜像
  10. CSS3-html,样式与样式表的创建,选择器