UVA 10382 - Watering Grass 贪心
来源:互联网 发布:漫画制作软件 编辑:程序博客网 时间:2024/06/02 01:05
看题传送门 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1323
题目大意:有一块草坪长为L宽为w,在其中心线的不同位置出装有n个点状的喷泉装置。每个喷泉装置i可以将以它为中心,半径为Ri的圆形区域润湿。求可以把整个草坪润湿的最少的喷水装置。
好多天以前A的题目
贪心。
做法是把喷泉装置的圆形区域转化为矩形区域。按每个能喷到的最左边的坐标进行排序。每次选择喷泉的时候务必保证喷泉左边能覆盖到上一个的右边,并且尽量靠右。
注意浮点数比较大小的方法。
#include<cstdio>#include<algorithm>#include<iostream>#include<cmath>using namespace std;const int MAXN=10000+10;struct sprinkler{double l,r;bool operator <(const sprinkler &x)const{return l<x.l;}}sp[MAXN];int main(){int n,len,w;while(scanf("%d%d%d",&n,&len,&w)!=EOF){int cnt=0,x;double r,temp,h;h=w/2.0;for(int i=0;i<n;i++){scanf("%d%lf",&x,&r);if(r*2 <= w)//一开始没等于狂wa!!!!!continue;temp=sqrt(r*r-h*h);sp[cnt].l=x-temp;sp[cnt].r=x+temp;cnt++;}sort(sp,sp+cnt);//按最左边的距离排序double L=0,R=len,max_r;int ans=0;while(L<R){max_r=0;for(int i=0;i<cnt;i++)if( sp[i].l-L <1e-16 && max_r - sp[i].r <1e-16 )max_r=sp[i].r;if(fabs(max_r-L)<1e-16){ ans=-1; break; }ans++;L=max_r;}printf("%d\n",ans);}}
- UVA 10382 - Watering Grass 贪心
- 10382 - Watering Grass uva贪心
- uva--10382Watering 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
- UVa 10382 - Watering Grass
- uva 10382 - Watering Grass
- uva 10382 - Watering Grass
- Uva 10382 - Watering Grass
- Uva-10382-Watering Grass
- UVA 10382 Watering Grass
- 【Java工程师之路】[1-1.5]Java递归算法
- HTML5 Canvas的一个有趣实例
- perl 二维数组的用法实例
- spoj 1526 (BOI2007 day1) (费用提前计算相关的DP)
- Struts2学习笔记
- UVA 10382 - Watering Grass 贪心
- 刘汝佳 竖式问题(C语言)
- sqlplus 远程连接 oracle 12514 错误
- linux下vi命令大全
- UVA 112 Tree Summing
- 【Java工程师之路】[1-1.6]java常用算法
- 刚学java!试着写写
- hdu3656Fire station(DLX重复覆盖 + 二分)
- virtual ABBYY2.0 Eazy