Codeforce 327D 二分

本文介绍了一种使用二分搜索法解决飞船在不同风速条件下从A点到B点最短时间的问题。通过调整坐标系来简化问题,并利用相对速度的概念进行求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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点.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值