【BZOJ 1857】[Scoi2010]传送带 三分套三分
2017-01-18 21:58
323 查看
很多细节,可以当一个版
#include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<cstdlib> using namespace std; const double eps=1e-7; struct node{ double x,y; }A,B,C,D,aa,bb,cc,dd; double v[5]; bool dcmp(double a,double b){return fabs(a-b)<=eps;} double sqr(double x){return x*x;} double T(double a,double b,double x,double y,int d){ return sqrt(sqr(x-a)+sqr(y-b))/v[d]; } double calc(double a,double b){ node t1,t2;double ans1,ans2; C=cc,D=dd; while(!dcmp(C.x,D.x)||!dcmp(C.y,D.y)){ t1.x=(C.x-D.x)/3.0+D.x,t1.y=(C.y-D.y)/3.0+D.y; t2.x=(C.x-D.x)/3.0*2+D.x,t2.y=(C.y-D.y)/3.0*2+D.y; ans1=T(aa.x,aa.y,a,b,1)+T(a,b,t1.x,t1.y,2)+T(t1.x,t1.y,dd.x,dd.y,3); ans2=T(aa.x,aa.y,a,b,1)+T(a,b,t2.x,t2.y,2)+T(t2.x,t2.y,dd.x,dd.y,3); if(ans1<ans2)C=t2;else D=t1; } return T(aa.x,aa.y,a,b,1)+T(a,b,t1.x,t1.y,2)+T(t1.x,t1.y,dd.x,dd.y,3); } int main(){ scanf("%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y); scanf("%lf%lf%lf%lf",&C.x,&C.y,&D.x,&D.y); aa.x=A.x,aa.y=A.y,dd.x=D.x,dd.y=D.y; bb.x=B.x,bb.y=B.y,cc.x=C.x,cc.y=C.y; scanf("%lf%lf%lf",&v[1],&v[3],&v[2]); while(!dcmp(A.x,B.x)||!dcmp(A.y,B.y)){ node t1,t2; t1.x=(A.x-B.x)/3.0+B.x,t1.y=(A.y-B.y)/3.0+B.y; t2.x=(A.x-B.x)/3.0*2+B.x,t2.y=(A.y-B.y)/3.0*2+B.y; double len1=calc(t1.x,t1.y),len2=calc(t2.x,t2.y); if(len1<len2)A=t2;else B=t1; } printf("%.2lf",calc(A.x,A.y)); return 0; }
相关文章推荐
- bzoj1857: [Scoi2010]传送带(三分套三分)
- BZOJ1857 SCOI2010 传送带 三分套三分
- 【模版】bzoj1857[Scoi2010]传送带 三分套三分
- 【bzoj1857】[Scoi2010]传送带 三分套三分
- 【BZOJ 1857】【SCOI2010】传送带 【三分套三分】
- [BZOJ 1857][SCOI 2010]传送带(三分套三分)
- BZOJ 1857 SCOI 2010 传送带 三分套三分
- Bzoj 1857: [Scoi2010]传送带(三分套三分)
- 【BZOJ1857】[Scoi2010]传送带【三分套三分】
- bzoj1857 [Scoi2010]传送带 [三分套三分]
- [省选前题目整理][BZOJ 1857][SCOI 2010]传送带(三分套三分)
- bzoj 1857: [Scoi2010]传送带 三分套三分
- bzoj 1857 [SCOI2010]传送带【三分套三分】
- 【BZOJ1857】[Scoi2010]传送带 三分套三分
- [BZOJ1857][Scoi2010]传送带(三分套三分+计算几何)
- BZOJ 1857 [Scoi2010]传送带 三分套三分
- BZOJ 1857 [Scoi2010]传送带 三分套三分
- 【BZOJ】1857: [Scoi2010]传送带(三分)
- 1857: [Scoi2010]传送带 三分套三分
- 【BZOJ1857】【SCOI2010】传送带 [三分]