uva 10382
来源:互联网 发布:手机qq游戏大厅mac版 编辑:程序博客网 时间:2024/05/22 06:19
n sprinklers are installed in a horizontal strip of grass l meters long and w meters wide. Each sprinkler is installed at the horizontal center line of the strip. For each sprinkler we are given its position as the distance from the left end of the center line and its radius of operation.
What is the minimum number of sprinklers to turn on in order to water the entire strip of grass?
Input consists of a number of cases. The first line for each case contains integer numbers n, l and w with n <= 10000. The next n lines contain two integers giving the position of a sprinkler and its radius of operation. (The picture above illustrates the first case from the sample input.)
Output
For each test case output the minimum number of sprinklers needed to water the entire strip of grass. If it is impossible to water the entire strip output -1.
Sample input
8 20 2
5 3
4 1
1 2
7 2
10 2
13 3
16 2
19 4
3 10 1
3 5
9 3
6 1
3 10 1
5 3
1 1
9 1
Sample Output
6
2
-1
题意:
有一个草坪,在草坪中有一些喷水装置,给出这个草坪的长和宽,和喷水装置的位置和半径,求最少放置多少个喷水装置能使得草坪被全部覆盖?
思路
这是一个区间覆盖问题,可以参考算法竞赛与入门经典P233,但是这个问题是圆形区域覆盖,不好计算,因此我们把圆形区域转换到草坪上来,就变成了矩形区域,这样便于计算。
代码:
#include<iostream>#include<cmath>using namespace std;class Circle{public: double left,right;}circle[10005];int main(){ int num; double lenth,width; while(cin>>num>>lenth>>width) { int i,j,k=0; double pos,radius; for(i=0; i<num; i++) { cin>>pos>>radius; if(radius*2>=width) { double l,r; l=pos-sqrt(radius*radius-(width/2)*(width/2)); r=pos+sqrt(radius*radius-(width/2)*(width/2)); circle[k].left=l; circle[k++].right=r; } } double begin=0,end=lenth; double maxlen=0; int cnt=0; while(begin<end) { maxlen=0; for(i=0; i<k; i++) { if(circle[i].left<=begin&&circle[i].right>maxlen) { maxlen=circle[i].right; } } if(maxlen==begin) { cnt=-1; break; } cnt++; begin=maxlen; } cout<<cnt<<endl; } return 0;}
- UVA 10382
- UVa 10382
- UVA 10382
- UVA 10382
- uva 10382
- UVa 10382
- uva 10382
- UVa 10382
- UVa 10382 Watering Grass
- UVa 10382 - Watering Grass
- UVa 10382 - Watering Grass
- uva 10382 - Watering Grass
- uva 10382 - Watering Grass
- Uva 10382 - Watering Grass
- Uva-10382-Watering Grass
- UVA 10382 Watering Grass
- UVa:10382 Watering Grass
- uva 10382 Watering Grass
- cJSON学习笔记2
- 2015.8.9--张佳莉
- vs2010 问题 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- C++ List 容器
- 计蒜客 难题题库 006 泥塑课
- uva 10382
- git学习之旅(六)——github远程服务器
- 树莓派 打开串口调试工具xgcom的方法
- OC->06 心塞!
- 10005---SpringMVC REST
- 计蒜客 难题题库 007 奇怪的国家
- Java常用排序算法/程序员必须掌握的8大排序算法
- 读书笔记《深入理解C++对象模型》
- Spark 1.4 code structure