uva10382-贪心分析
来源:互联网 发布:壹号人家女装批发淘宝 编辑:程序博客网 时间:2024/06/07 09:12
首先把一个圆转化为区域,用结构体range,存的范围是 [a,b] ;之后对range进行排序,从start=0.0开始枚举a<=0.0的所有范围,找出在这些range中最大的b,之后令start=b,直到b>length;count=-1一共有两种情况:一:中间有地方连接不上,二:到不了最后;(注意要ranges.clear( ) );
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>#include<vector>using namespace std;const int maxn=1e4+5;const double eps=1e-11;struct Range{ double a; double b; bool operator < (const Range &ano)const{ return a<ano.a||(a==ano.a&&b<ano.b); }};vector <Range> ranges;int main(){ //freopen("int.txt","r",stdin); int n,l,w; while(~scanf("%d%d%d",&n,&l,&w)){ ranges.clear(); double length=(double) l,weight=(double) w/2.0; for(int i=0;i<n;i++){ int position ,radius; scanf("%d%d",&position,&radius); if(2*radius<=w)continue; Range range; double r=(double) radius,p=(double) position; double xw=sqrt(r*r-weight*weight); if(p-xw>length)continue; range.a=p-xw; range.b=p+xw; if(range.a - eps < 0.0) range.a = 0.0; ranges.push_back(range); } sort(ranges.begin(),ranges.end()); double start=.0,end=.0; int cnt=0; for(vector<Range>::iterator pr=ranges.begin();pr!=ranges.end();){ start =end; if(pr->a-start>eps){ cnt=-1; break; } cnt++; while(pr!=ranges.end()&&pr->a<=start){ if(pr->b-end>eps)end=pr->b; pr++; } if(end-length>eps)break; } if(length>end+eps)cnt=-1; printf("%d\n",cnt); } return 0;}
0 0
- uva10382-贪心分析
- [贪心]UVA10382 Watering Grass
- UVA10382 Watering Grass (贪心)
- UVA10382-Watering Grass(贪心)
- uva10382
- Uva10382
- UVA10382
- uva10382
- UVa10382
- uva10382(贪心算法---区间覆盖问题)
- uva10382 - Watering Grass
- Uva10382 Watering Grass
- UVA10382喷水装置
- uva10382解题报告
- uva10382 -Watering Grass
- 词法分析中的贪心
- 贪心算法分析
- 贪心算法分析
- 《C++ Primer第四版》学习笔记(七)变量和基本类型 - typedef、枚举、类
- 最大熵学习笔记(一)预备知识
- Mongodb启动命令mongod参数说明
- C++语言之浮点型
- 分辨清楚“韧性”与“倔强不听话”[图]
- uva10382-贪心分析
- 认生、内敛不等同于孤独症[图]
- 最大熵学习笔记(二)最大熵原理
- 开卷有益--《高效能程序员的修炼》
- 最大熵学习笔记(三)最大熵模型
- 2岁小孩是不是叛逆心理重[图]
- 最大熵学习笔记(四)模型求解
- 《C++ Primer第四版》 第二章 变量和基本类型 - 总结
- 3岁孩子亦会不自信吗[图]