UVA 10382(p79)----Watering Grass
2016-03-23 22:13
363 查看
#include<bits/stdc++.h> #define debu using namespace std; const int maxn=1e4+50; struct point { double l,r; bool operator < (const point& rhs) const { if(rhs.l==l) return rhs.r>r; else return rhs.l>l; } }; int n,l,w,num; point a[maxn]; void solve() { sort(a,a+num); double left=0.0; double right=0.0; int flag=0,i=0,j,ans=0; if(a[0].l<=0) { while(i<num) { j=i; while(j<num&&a[j].l<=left) { if(a[j].r>right) right=a[j].r; j++; } if(i==j) break; i=j; ans++; left=right; if(left>=l) { flag=1; break; } } } if(flag) printf("%d\n",ans); else printf("%d\n",-1); } int main() { #ifdef debug freopen("in.in","r",stdin); #endif // debug while(scanf("%d%d%d",&n,&l,&w)!=EOF) { num=0; for(int i=0; i<n; i++) { int x,r; scanf("%d%d",&x,&r); if(r*2<w) continue; double tmp=sqrt((double)r*r-(double)w*w/4); a[num].l=(double)x-tmp; a[num].r=(double)x+tmp; num++; } solve(); } return 0; }
题目地址:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1323
题解:圆形可覆盖的面积实际等于圆形与长方形相交所形成的矩形,长为sqrt(r*r-w*w/4)*2,宽为w。r*2<w的圆可直接舍弃。则问题转化为选择尽量少的区间,将长为l的区间覆盖。贪心:每次选取尽量像右延伸最多的区间即可。
相关文章推荐
- HDU 5305 Friends dfs
- iOS 下拉刷新-上拉加载原理
- psp记录个人项目花费时间
- 《Linux内核设计与实现》读书笔记——第五章
- cocos2d-x的安装
- 【项目 1-求最大公约数】
- volatile的特性
- synchronize关键字
- POJ1860(Currency Exchange)
- 学生成绩
- CF_3C_Tic-tac-toe
- iOS 侧滑按钮的实现
- 今天连续几次被其他电脑客户端踢下线,也不知是否是ip冲突
- Centos 6.5升级到Git2.1.2的步骤
- 网络管理与配置
- 【NYOJ】[168]房间安排
- poj1458 Common Subsequence(最长公共子序列)
- 400错误
- 设计模式课后习题(工厂模式)
- CC2541 AirSync(5)——登录包