UVa 10382
2013-04-22 08:51
134 查看
/* 有一块草坪,长为l,宽为w, 在它的水平中心线上有n个位置可以安装喷水装置, 各个位置上的喷水装置的覆盖范围为以它们自己的半径ri为圆。求出最少需要的喷水装置个数。 将他映射到一边,变成区间覆盖问题 */ #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; #define N 10005 struct line { double left,right; }a ; bool cmp(line a,line b) { return a.left<b.left; } int main() { int n; double l,w,x,r,y; int num; while(scanf("%d%lf%lf",&n,&l,&w)!=EOF) { num=0; for(int i=0;i<n;i++) { scanf("%lf%lf",&x,&r); if(2*r<=w) continue; y=sqrt(1.0*r*r-w*w/4.0); a[num].left=x-y; a[num].right=x+y; num++; } if(num==0) { printf("-1\n"); continue; } sort(a,a+num,cmp); bool flag=0; int cnt=0; double left=0; double right=0; // for(int i=0;i<num;i++) // printf("%lf %lf++\n",a[i].left,a[i].right); if(a[0].left<=0) { int i=0; while(i<num) { int j=i; while(j<num && a[j].left<=left) { if(a[j].right>right) { right=a[j].right; } j++; } if(i==j) break; cnt++; left=right; i=j; if(left>=l) { flag=true; break; } } } if(flag) printf("%d\n",cnt); else printf("-1\n"); } return 0; }
相关文章推荐
- uva10382解题报告
- uva 10382
- UVA10382- Watering Grass(区间覆盖问题)
- UVa 10382 喷水装置(贪心)
- UVA 10382(p79)----Watering Grass
- uva 10382题解(贪心)
- UVA 10382 Watering Grass(变相的最小覆盖问题)
- UVa-10382 Watering Grass **
- UVa 10382 - Watering Grass
- UVA 10382 Watering Grass
- uva 10382
- UVa 10382 - Watering Grass(贪心+区间覆盖问题)
- Uva 10382 - Watering Grass
- UVA10382-Watering Grass-贪心 NYOJ6-喷水装置(一)-贪心
- 《黑书》uva10382喷水装置,贪心经典题
- UVa 10382 - Watering Grass (贪心—区间覆盖)
- Uva 10382 Watering Grass
- Uva-10382-Watering Grass
- uva-10382-Watering Grass
- UVA 10382 Watering Grass(区间嵌套)