首页 > 其他 > 详细

SCOI2010 传送带

时间:2019-03-13 14:00:00      阅读:175      评论:0      收藏:0      [点我收藏+]
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define eps 1e-9
double Ax,Ay,Bx,By,Cx,Cy,Dx,Dy,P,Q,R;
inline double dis(double x1,double y1,double x2,double y2){
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
inline double calc(double x,double y){
    double Ex=Ax+(Bx-Ax)*x,Ey=Ay+(By-Ay)*x,Fx=Cx+(Dx-Cx)*y,Fy=Cy+(Dy-Cy)*y;
    return dis(Ax,Ay,Ex,Ey)/P+dis(Ex,Ey,Fx,Fy)/R+dis(Fx,Fy,Dx,Dy)/Q;
}
inline double check(double x){
    double l=0,r=1,lm,rm;
    for(;r-l>eps;){
        lm=l+(r-l)/3;
        rm=r-(r-l)/3;
        if(calc(x,lm)>calc(x,rm))
            l=lm;
        else r=rm;
    }
    return calc(x,l);
}
int main(){
    scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&Ax,&Ay,&Bx,&By,&Cx,&Cy,&Dx,&Dy,&P,&Q,&R);
    double l=0,r=1,lm,rm;
    for(;r-l>eps;){
        lm=l+(r-l)/3;
        rm=r-(r-l)/3;
        if(check(lm)>check(rm))
            l=lm;
        else r=rm;
    }
    printf("%.2lf",check(l));
    return 0;
}

SCOI2010 传送带

原文:https://www.cnblogs.com/pelom/p/10522588.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!