Codeforce 327D 二分

来源:互联网 发布:淘宝搭配套餐的链接 编辑:程序博客网 时间:2024/05/16 06:14
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>using namespace std;const double eps = 1e-7;double X1, Y1, X2, Y2, Vmax, t, Vx1, Vy1, Vy2, Vx2;bool check(double mid){double X = X2, Y = Y2, D = Vmax * mid;if (mid >= t){X -= Vx2 * (mid - t) + Vx1 * t;Y -= Vy2 * (mid - t) + Vy1 * t;}else{X -= Vx1 * mid;Y -= Vy1 * mid;}if ((X - X1) * (X - X1) + (Y - Y1) * (Y - Y1) <= D * D) return true;else return false;}int main(int argc, char const *argv[]){while (~scanf("%lf%lf%lf%lf", &X1, &Y1, &X2, &Y2)){scanf("%lf%lf", &Vmax, &t);scanf("%lf%lf%lf%lf", &Vx1, &Vy1, &Vx2, &Vy2);double l = 0, r = 1e9, mid = (l + r) / 2;while (r - l >= eps){if (check(mid)) r = mid;else  l = mid;mid = (l + r) / 2;}printf("%.7lf\n", r);}return 0;}


最大的难度在于英语。。。。。。

从A点坐飞船到B点,飞船相对空气飞行的最大速度为vmax,速度大小方向可以随时改变.天气预报说今天有大风,t时刻前风向及大小用向量(ux,uy)表示,而t时刻之后转变为(vx,vy).当飞船相对空气静止时,在风(wx,wy)作用下将以(wx,wy)的速度运动.也就是说,实际速度向量是飞船速度向量和风速合成的结果. 问,至少需要多少时间才能从A点到达B点.

已知时间大于Vmax时,必然到达。那么显然就是二分或者三分。

恩,需要一些物理上的小技巧,把相对地面坐标系换成相对风,这样就简单多了。

确定B点在反向风力下运动t′时间(注意风向在t时刻改变)后的位置,而这段时间内飞船能到达的位置与飞船距离不超过t′∗vmax,也就是说只要判断运动t′时间后的B点到飞船的距离是否不超过t′∗vmax即可确定飞船能否在t′时间内从A点出发到达B点.

0 0
原创粉丝点击