NYOJ 12 喷水装置(二)
来源:互联网 发布:php nodejs 编辑:程序博客网 时间:2024/05/18 00:22
描述
有一块草坪,横向长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
C
#include <iostream>#include<algorithm>#include<cstdio>#include<cmath>using namespace std;struct js{ double a,b;};bool cmp(js a,js b){ return a.a<b.a;}int main(){ js m[10100]; int a,b,c,d,e,f,g,r,h,w; double l,s,n; cin>>a; while(a--) { cin>>b>>c>>h; for(e=0;e<b;e++) { cin>>d>>r; n=1.0*r*r-1.0*h/2*h/2; if(n>=0) { n=sqrt(n); } else n=0; m[e].a=d-n;m[e].b=d+n; //m[e].a存放每个喷水装置的所喷范围头,m[e].b存放每个喷水装置的所喷范围尾 } sort(m,m+b,cmp); //sort排序 g=0;s=0;w=1; while(s<c) { l=0; for(e=0;e<b&&m[e].a<=s;e++) //s是上一个喷水装置的尾所在位置 { if((m[e].b-s)>l) //找出喷水范围最大的喷水装置 { l=m[e].b-s; } } if(l==0) //不存在一种能够把整个草坪湿润的方案 { w=0; break; } else { s=s+l;g++; } } if(w) cout<<g<<endl; else cout<<"0"<<endl; } return 0;}
阅读全文
0 0
- NYOJ 12 喷水装置(二)
- NYOJ 12 喷水装置(二)
- nyoj 12 喷水装置(二)
- NYOJ 题目12喷水装置(二)
- NYOJ 12 喷水装置(二)
- Nyoj 12 喷水装置(二)
- NYOJ 12 喷水装置(二)
- NYOJ 12 喷水装置(二)
- nyoj 12 喷水装置(二)
- NYOJ 12 喷水装置(二)
- NYOJ-12-喷水装置(二)
- nyoj 12 喷水装置(二)
- NYOJ--12--喷水装置(二)
- NYOJ 12 喷水装置(二)
- nyoj 12 喷水装置(二)
- NYOJ-12 喷水装置(二)
- nyoj 12 喷水装置(二)
- nyoj 12 喷水装置(二)
- RatingBar使用
- VS2013安装不上的解决办法——to .NET problem
- CentOS系统学习笔记
- TyvjP1047乘积最大
- 那些年——7 286&586
- NYOJ 12 喷水装置(二)
- 第K大的数
- java各类型数据位数
- Beautiful Soup 使用总结
- 自定义view点击
- 单击屏幕坐标获取三维坐标
- 一些好的技术网站
- Tomcat源码解析之连接器解析请求
- Android手机车牌识别技术是这样的