UVA10382
来源:互联网 发布:centos nfs安装配置 编辑:程序博客网 时间:2024/06/10 20:11
题目的意思就是有一块长为l ,宽为 w的草地。要给它浇水。
现在有n个喷头,都在中心线上。
每个喷头给出它的位置,和半径,问最少拿几个喷头可以全部喷满草地。
要把圆形转化为矩形,其实一个圆形区域的有效范围 只有圆形与草地的四个交点所组成的矩形,我们要通过圆心位置和半径,把它转化为左边界,右边界,然后就是一般的最小覆盖。还有要注意的是如果一个喷头的半径不足宽的一半,就可以直接删了它了。。
ac代码:
#include<iostream>#include<cmath>#include<algorithm>using namespace std;const int N = 10005;double n,l,w;struct node {double l;double r;}p[N];int cmp (node a ,node b) {return a.l < b.l;}node cul (double cen ,double ra) {node temp;temp.l = cen - sqrt(ra * ra - (w / 2) * (w / 2));temp.r = cen + sqrt(ra * ra - (w / 2) * (w / 2));return temp;}int main () {while (cin >> n >> l >> w) {int num = 0;double cen ,ra;for (int i = 0 ; i < n ;i++) {cin >> cen >> ra ;if (ra < w / 2)continue;else {p[num++] = cul(cen , ra);}}sort(p ,p + num ,cmp);//for(int i = 0 ; i < num ;i++) {//cout << p[i].l << endl;//}//cout << endl;double mi = 0;int t = 0;if (p[0].l > 0) {cout << "-1" <<endl;continue;}//cout << p[0].l << endl << endl;while (mi < l) {double temp = mi;for (int i = 0 ;i < num ;i++) {if (p[i].l <= mi && p[i].r > temp)temp = p[i].r;}if (temp == mi) {t = -1;break;}mi = temp;t++;}cout << t << endl;}}
0 0
- uva10382
- Uva10382
- UVA10382
- uva10382
- UVa10382
- uva10382 - Watering Grass
- Uva10382 Watering Grass
- [贪心]UVA10382 Watering Grass
- uva10382-贪心分析
- UVA10382喷水装置
- uva10382解题报告
- uva10382 -Watering Grass
- UVA10382 Watering Grass (贪心)
- UVA10382-Watering Grass(贪心)
- uva10382 - Watering Grass(给草浇水)
- uva10382 - Watering Grass(区间覆盖变形)
- UVA10382- Watering Grass(区间覆盖问题)
- uva10382(贪心算法---区间覆盖问题)
- 的感情和国外的情感和违法
- Maven Nexus配置
- matlab中fft的简单应用
- 设计模式之-命令模式(Command Pattern)
- 红黑树创建
- UVA10382
- python爬虫
- Netty3 源码分析 - ChannelFuture
- How to use dylib in Mac OS X
- JavaSe基础XX19——GUI
- C++继承之重载与覆盖
- HDU 4998 Rotate / 2014 ACM/ICPC Asia Regional Anshan Online
- java web学习笔记1
- 二叉树 - 二叉排序树