传送带(三分套三分)

简介: 传送带(三分套三分)

这个毒瘤题

原题链接

题目描述

在一个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;
}

萌新报道,欢迎指正~

目录
相关文章
|
6月前
|
IDE Java C#
C#初相识
C#初相识
51 0
|
6月前
三分~~~~
三分~~~~
21 0
星际争霸之小霸王之小蜜蜂(十二)--猫有九条命
星际争霸之小霸王之小蜜蜂(十二)--猫有九条命
|
定位技术
国庆七天乐,要猛! ——经典迷宫问题
国庆七天乐,要猛! ——经典迷宫问题
83 0
|
弹性计算 关系型数据库 Java
个人工作总结无代码-三分白
个人工作总结无代码-三分白
438 0
|
前端开发
个人工作总结前端-三分白
个人工作总结前端-三分白
95 0
|
机器学习/深度学习 算法 Java
小鱼游泳,问小鱼游了多远?(java算法)
小鱼游泳,问小鱼游了多远?(java算法)
193 0
|
算法
《C游记》 番外篇(壹)二分查找显神威 猜数游戏趣味生
《C游记》 番外篇(壹)二分查找显神威 猜数游戏趣味生
134 0
《C游记》 番外篇(壹)二分查找显神威 猜数游戏趣味生
读《股票大作手操盘术》— 利弗莫尔操作法则
《股票大作手操盘术》读书笔记; 股票大作手操盘术是利弗莫尔本人写的一本著作,利弗莫尔在股民中的知名度自然不必多言,其著作中的思想放在当代也很有意义,所以最近拜读了一下。
1886 0
下一篇
无影云桌面