zoukankan      html  css  js  c++  java
  • 传送带(三分套三分)

    这个毒瘤题
    原题链接
    题目描述
    在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间
    输入
    第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By
    第二行是4个整数,表示C和D的坐标,分别为Cx,Cy,Dx,Dy
    第三行是3个整数,分别是P,Q,R
    输出
    一行,表示lxhgww从A点走到D点的最短时间,保留到小数点后2位
    样例输入 Copy
    0 0 0 100
    100 0 100 100
    2 2 1
    样例输出 Copy
    136.60
    提示
    对于100%的数据,1<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000,1<=P,Q,R<=10

    解题思路:
    在线段AB和线段CD分别选一个点E,F。假设所需的最短时间的路径为:A->E->F->D。假设E点已经找到,然后线段CD上三分寻找F点的位置,使得E->F->D的时间最小。然后在线段AB上三分E点的位置,最后将两段的时间加起来就是最小的时间。
    证明看这个

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    double xa,ya,xb,yb,xc,yc,xd,yd,p,q,r;
    double dis(double x1,double y1,double x2,double y2){
        //return fabs(x1-x2)+fabs(y1-y2);
        return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    }
    double check(double x,double y){
        double xl=xc,yl=yc,xr=xd,yr=yd;
        while(fabs(xr-xl)>1e-8||fabs(yr-yl)>1e-8){
            double xmid1=xl+(xr-xl)/3,ymid1=yl+(yr-yl)/3;
            double xmid2=xr-(xr-xl)/3,ymid2=yr-(yr-yl)/3;
            double t1=dis(xa,ya,x,y)/p+dis(x,y,xmid1,ymid1)/r+dis(xmid1,ymid1,xd,yd)/q;
            double t2=dis(xa,ya,x,y)/p+dis(x,y,xmid2,ymid2)/r+dis(xmid2,ymid2,xd,yd)/q;
            if(t1<t2) xr=xmid2,yr=ymid2;
            else xl=xmid1,yl=ymid1;
        }
        return dis(xa,ya,x,y)/p+dis(x,y,xl,yl)/r+dis(xl,yl,xd,yd)/q;
    }
    int main(){
        cin>>xa>>ya>>xb>>yb>>xc>>yc>>xd>>yd>>p>>q>>r;
        double xl=xa,yl=ya,xr=xb,yr=yb;
        while(fabs(xr-xl)>1e-8||fabs(yr-yl)>1e-8){
            double xmid1=xl+(xr-xl)/3,ymid1=yl+(yr-yl)/3;
            double xmid2=xr-(xr-xl)/3,ymid2=yr-(yr-yl)/3;
            if(check(xmid1,ymid1)<check(xmid2,ymid2)) xr=xmid2,yr=ymid2;
            else xl=xmid1,yl=ymid1;
        }
        printf("%.2lf",check(xl,yl));
        return 0;
    }
    
    

    萌新报道,欢迎指正~

  • 相关阅读:
    为什么使用内部类?怎样使用内部类? 2016年12月15号
    java内部类 2016年12月13号
    接口与抽象类的区别与联系 2016年12月13日
    多态的向上转型和向下转型 2016.12.8
    构造器的调用顺序 2016.12.8
    static final 和final的区别 2016.12.07
    根据进程号查询占用资源多的线程
    Intellij idea启动项目提示"ClassNotFoundException"
    IntelliJ IDEA setup JDK无效
    (转)面试合集
  • 原文地址:https://www.cnblogs.com/OvOq/p/14853218.html
Copyright © 2011-2022 走看看