uva 10382(几何+贪心)

it2022-05-24  76

感觉能做出来,场上就是没做出来,本来想一个循环跑完的,结果失败了,看了题解都是跑了两个循环,感觉以后只要卡一下时间就会超时,但还是想不到解决方法

付:精度控制大佬博客http://blog.csdn.net/entalent/article/details/47620341

#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int maxn=10000+10; double judge(double c,double a) { double mmp=c*c-a*a; return sqrt(mmp); } struct note { double x,y; bool operator <(const note &p) { return x<p.x||x==p.x&&y<p.y; } }aa[maxn]; int n; double l,w; int main() { while(~scanf("%d%lf%lf",&n,&l,&w)) { memset(aa,0,sizeof(aa)); double c,r; int cnt=0; for(int i=1; i<=n; i++) { scanf("%lf%lf",&c,&r); if(w<r+r) { cnt++; double ll,rr; double mmp=judge(r,w/2.0); ll=c-mmp; rr=c+mmp; aa[cnt].x=ll; aa[cnt].y=rr; } } sort(aa+1,aa+1+cnt); if(cnt==0||aa[1].x>0) printf("-1\n"); else { int ans=0; double r=0,rr=0; while(r<l) { rr=r; for(int i=1;i<=cnt;i++) { if(aa[i].x<=r&&aa[i].y>rr) rr=aa[i].y; } if(rr==r) { ans=-1; break; } ans++; r=rr; } printf("%d\n",ans); } } return 0; }

 

转载于:https://www.cnblogs.com/Wangwanxiang/p/7418263.html


最新回复(0)