10382 - Watering Grass uva贪心
2014-04-08 15:14
260 查看
将圆看成一个矩形转化成区域覆盖问题,不过在一开始读入的时候就要转化,不能在贪心的过程中计算,(可能有精度丢失吧),反正我如果按半径读入,计算的时候转化一直是WA,如果一开始就按矩形读入的话,就AC
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> using namespace std; #define MAX_SIZE 10000 + 100 struct Circle { double x; double y; friend bool operator <(const Circle & a,const Circle & b){ return a.x<b.x; } }; int main() { int n,l,w; while(scanf("%d%d%d",&n,&l,&w)!=EOF){ int m=0; Circle cir[MAX_SIZE]; for(int i=0;i<n;i++){ double o,r; scanf("%lf%lf",&o,&r); if(r>=1.0*w/2){ cir[m].x=o-sqrt(r*r-1.0*w*w/4); cir[m].y=o+sqrt(r*r-1.0*w*w/4); m++; } } sort(cir,cir+m); int ok=0; double next=0; double maxs=-9999; int can=1; int counts=0; for(int i=0;i<m;i++){ if(cir[i].x<=next){ ok=1; if(cir[i].y>maxs){ maxs=cir[i].y; } } else if(cir[i].x>next&&ok==1){ next=maxs; maxs=-99999; counts++; ok=0; i--; } else if(cir[i].x>next&&ok==0) { can=0; break; } } if(ok==1){ next=maxs; counts++; } if(!can) printf("-1"); else if(next>=l) printf("%d",counts); else if(next<l) printf("-1"); printf("\n"); } return 0; }
相关文章推荐
- UVA10382-Watering Grass-贪心 NYOJ6-喷水装置(一)-贪心
- uva 10382 Watering Grass_贪心
- uva 10382 Watering Grass_贪心
- UVa 10382 - Watering Grass(贪心+区间覆盖问题)
- UVA - 10382 Watering Grass 贪心(几何)
- 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