题目链接
题意
在一个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;
}