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

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

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

#include<bits/stdc++.h>
using namespace std; double x[], y[];
double vm, t0;
double v[], w[]; const double eps = 1e-;
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[], double y1 = y[])
{
dex = x1-x0; dey = y1-y0;
if(!unitization()) return ;
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 LOCAL
freopen("in.txt","r",stdin);
#endif
scanf("%lf%lf%lf%lf", x, y, x+, y+);
scanf("%lf%lf", &vm, &t0);
scanf("%lf%lf%lf%lf", v, v+, w, w+);
double t = MinTime(x[], y[], v[], v[]);
if(t0 >= t){
printf("%.18lf\n",t);
}else {
printf("%.18lf\n", MinTime(x[]+(v[]-w[])*t0, y[]+(v[]-w[])*t0, w[], w[]));
}
return ;
}

最新文章

  1. 建造者模式组装mybatis参数Example()
  2. CMPP3.0 长短信实现方案
  3. UVA3026Period(最短循环节)
  4. window.document
  5. java软件包的访问权限和继承
  6. windows下查看所有进程以及pid
  7. EF6 在原有数据库中使用 CodeFirst 总复习(四、新建实体对象)
  8. JavaScript + CSS3 实现的海报画廊特效
  9. 关于ng路由的传参问题(传递一个,多个参数)
  10. 九种迹象表明你该用Linux了
  11. ios zxing扫码问题
  12. Keras实现LSTM
  13. JS 中 原生方法 (二) --- 数组 (修---添加ES6新增)
  14. Git 版本还原命令
  15. 关于分页Pagination的使用
  16. UVa 12627 Erratic Expansion - 分治
  17. ElasticSearch入坑指南之概述及安装
  18. JS实现图的创建和遍历
  19. C#中的异步调用及异步设计模式(一)
  20. 【VBA编程】10.自定义集合

热门文章

  1. Typography 文字排版
  2. loj#6433. 「PKUSC2018」最大前缀和(状压dp)
  3. DMZ主机
  4. 使用mount命令挂载CDROM
  5. 存储引擎:MySQL系列之七
  6. 洛谷P2574 XOR的艺术
  7. python基本数据类型练习
  8. POJ2758 Checking the Text 哈希
  9. Vue 3 --安装脚手架、过滤器、生命周期的钩子函数、vue-router基本使用
  10. maven-jar-plugin 使用maven生成可执行的jar包install a test-jar in maven