我们要从点(x1,y1)到达点(x2,y2),我们飞机的最大速度是v,现在已知t秒前的风速向量是(vx,vy),t妙后的风速向量是(wx,wy);问我们需要航行多长时间到达目的地。
思路:
①首先我们能够确定,如果时间t能够到达目的地的话,那么t+1时刻也能够到达目的地。所以我们二分一个时间,来check一下即可。
②对于当前枚举的时间mid,我们计算mid时间内,从起点被风所影响能够到达的点(posx,posy),然后计算(posx,posy)和终点的距离,如果我们有:v*mid>=dist,那么对应时间mid内一定能够到达终点,同时减少R,继续二分即可。
过程维护一下。
Ac代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
double x1,y1,x2,y2,v,t,vx,vy,wx,wy;
while(~scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&v,&t,&vx,&vy,&wx,&wy))
{
double ans=0;
double l=0;
double r=1e9;
for(int i=0;i<120;i++)
{
double mid=(l+r)/2;
double posx=x1+min(t,mid)*vx+max(mid-t,0.0)*wx;
double posy=y1+min(t,mid)*vy+max(mid-t,0.0)*wy;
double dist=sqrt((posx-x2)*(posx-x2)+(posy-y2)*(posy-y2));
if(v*mid>=dist)r=mid,ans=mid;
else l=mid;
}
printf("%.12lf\n",ans);
}
}