NC20276 传送带

题目链接

题目链接

题意

在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间

思路

  • 首先对一个传送带进行三分选择合适的出口,然后对第二个传送带三分选择合适的入口
  • 注意精度

参考代码

#include<bits/stdc++.h>
using namespace std;
double p,q,r;
double ax,ay,bx,by,cx,cy,dx,dy;
double xx,yy;
double dis(double x,double y,double x1,double y1)
{
    return sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
}
double judge1(double k)
{
    double x2=dx+k*(cx-dx),y2=dy+k*(cy-dy);
    return dis(xx,yy,x2,y2)/r+dis(x2,y2,dx,dy)/q;
}
double judge(double k)
{
    xx=ax+k*(bx-ax);
    yy=ay+k*(by-ay);
    double l1=0,r1=1;
   while(r1-l1>=0.000001)
    {
        double mid1=l1+(r1-l1)/3;
        double mid2=r1-(r1-l1)/3;
        if(judge1(mid1)>=judge1(mid2))
        {
            l1=mid1;
        }
        else
        {
            r1=mid2;
        }
    }
    return judge1(l1)+dis(ax,ay,xx,yy)/p;
}
int main()
{
    cin>>ax>>ay>>bx>>by;
    cin>>cx>>cy>>dx>>dy;
    cin>>p>>q>>r;
    double l=0,r=1;
     while(r-l>=0.000001)
    {
        double mid1=l+(r-l)/3;
        double mid2=r-(r-l)/3;
        if(judge(mid1)>=judge(mid2))
        {
            l=mid1;
        }
        else
        {
            r=mid2;
        }
    }
    cout<<fixed<<setprecision(2)<<judge(l)<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hlee-top

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值