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;
    }
    
    

    萌新报道,欢迎指正~

  • 相关阅读:
    docker删除容器再删除镜像
    centOS7安装docker遇到 [Errno 14] curl#35
    设置centos7界面语言为中文
    sublime查看项目代码多少行
    1. 常用及特殊
    7.逆波兰,二叉树三叉树
    6.表单提交,input键盘变搜索,有关自定义属性input操作
    5.字符串的第一次见到的方法
    2.手机上浏览器看控制台的插件
    1. 时间插件
  • 原文地址:https://www.cnblogs.com/OvOq/p/14853218.html
Copyright © 2011-2022 走看看