Codeforces Round #327 590B Chip 'n Dale Rescue Rangers(等效转换,二分)

阅读: 评论:0

Codeforces Round #327  590B  Chip 'n Dale Rescue Rangers(等效转换,二分)

Codeforces Round #327 590B Chip 'n Dale Rescue Rangers(等效转换,二分)

t和可到达具有单调性,二分就不多说了。下面说下O(1)的做法,实际上是等效转换,因为答案一定存在,如果在t0之前,那么分解一下

直接按照只有v计算就可以了。反过来如果计算的结果大于t0,那么表示答案在t0之后。因为速度分量是可以独立累加的,因此

可以找到一开始就只有w的等效的点。

#include<bits/stdc++.h>
using namespace std;double x[2], y[2];
double vm, t0;
double v[2], w[2];const double eps = 1e-11;
double dex, dey, D;
bool unitization(double &dx = dex, double &dy = dey)
{D = hypot(dx, dy);if(D > eps){dx /= D; dy /= D;return true;}return false;
}inline double Dot(double vx, double vy)
{return dex*vx + dey*vy;
}inline double Cross(double vx, double vy)
{return dex*vy - dey*vx;
}inline double MinTime(double x0, double y0, double vx, double vy, double x1 = x[1], double y1 = y[1])
{dex = x1-x0; dey = y1-y0;if(!unitization()) return 0;double vh = Cross(vx,vy);double vn = Dot(vx,vy);double vc = vn + sqrt(vm*vm - vh*vh);return D/vc;
}//#define LOCAL
int main()
{
#ifdef LOCALfreopen(&#","r",stdin);
#endifscanf("%lf%lf%lf%lf", x, y, x+1, y+1);scanf("%lf%lf", &vm, &t0);scanf("%lf%lf%lf%lf", v, v+1, w, w+1);double t = MinTime(x[0], y[0], v[0], v[1]);if(t0 >= t){printf("%.18lfn",t);}else {printf("%.18lfn", MinTime(x[0]+(v[0]-w[0])*t0, y[0]+(v[1]-w[1])*t0, w[0], w[1]));}return 0;
}

 

转载于:.html

本文发布于:2024-01-31 18:48:36,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170669811730604.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Codeforces   Chip   Rangers   Rescue   Dale
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23