本文主要是介绍Codeforces Round #327 (Div. 1) B. Chip 'n Dale Rescue Rangers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意
你一开始在 x1 , y1 ,你要走到 x2 , y2 ,但是这时候有风,风在 t 秒前风速是
你和风的相对速度,最多差距 vmax ,保证 vmax 大于风速,然后问你,最少什么时候到达
思路:
风当做相对坐标系,那么就可以看做终点加了一个和风相反的速度,然后你负责追它就好了
二分时间,然后跑
#include<bits/stdc++.h>
using namespace std;double eps = 1e-9;
double dist(double x,double y,double xx,double yy)
{return sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy));
}double sx,sy;
double ex,ey,v,t,vx,vy,wx,wy;int check(double tt)
{double x=ex,y=ey;if(tt<=t){x=x+-vx*tt;y=y+-vy*tt;}else{x=x+-vx*t+-wx*(tt-t);y=y+-vy*t+-wy*(tt-t);}if(dist(sx,sy,x,y)<=tt*v)return 1;return 0;
}int main()
{scanf("%lf %lf %lf %lf",&sx,&sy,&ex,&ey);scanf("%lf %lf",&v,&t);scanf("%lf %lf %lf %lf",&vx,&vy,&wx,&wy);double l=0.00,r=t;for(int i=1;i<=100;i++){double mid=(l+r)/2.0;if(check(mid)) r=mid;else l=mid;}if(check(t)){printf("%.12lf\n",l);return 0;}l=t, r=9999999999.0;for(int i=1;i<=100;i++){double mid=(l+r)/2.0;if(check(mid)) r=mid;else l=mid;}printf("%.12lf\n",l);return 0;
}
这篇关于Codeforces Round #327 (Div. 1) B. Chip 'n Dale Rescue Rangers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!