Air Hockey

 

无聊的过河船同学和无聊的胀鱼同学非常喜欢打桌上冰球(其实只是喜欢听球碰撞时的声音)。在无聊的一天,无聊的过河船同学想到了一个无聊的玩法:两人同时将两个球放桌面上,同时击出,然后听两颗球撞在一起时的声音。然而他们都对击球的精确度把握得不是很好,所以这两颗球并不一定能相撞。

现在假设桌面无限大,并且绝对光滑,给出两球的初始位置、半径和运动速度,保证两球初始没有接触。无聊的过河船同学想知道两球能否相撞(接触即认为相撞),如果能,他想知道两球相撞的时间(从两人击球时开始计时),如果不能,他想知道全过程中两球距离的最小值,这里两球距离的定义为两球上任取两个点的距离的最小值,数据保证这种情况下答案不小于。请注意,冰球是个圆柱体,从空中往下看就是一个圆,且在这个问题中,冰球的高度可以忽略不计。

 

Input

第一行是一个正整数,表示测试数据的组数,

每组测试数据包含两行,

行包含五个绝对值不大于的整数,表示第个球的初始位置、半径和运动速度。

 

Output

对于每组测试数据,若两球能相撞,输出两球相撞的时间,否则输出全过程中两球距离的最小值,相对误差不超过即可,

也就是说,令输出结果为,标准答案为,若满足,则输出结果会被认为是正确答案。
 

Sample Input

2
0 0 2 1 0
11 0 1 -1 0
0 0 2 1 0
11 5 1 -1 0

Sample Output

4.0000000000
2.0000000000

Hint

对于第一组样例,两球在击球后4.0秒时发生碰撞,

对于第二组样例,两球不发生碰撞,且在击球后5.5秒时两球距离最近,此时距离为2.0。

 

Source

Author

题解:

  

两个不同大小的圆柱体向不同的方向以不同速度同时出发,问是否能碰撞,不能的话给出最小距离,能的话给出碰撞的时间。

解题思路:

可以证明两球在运动过程中一定是先靠近再变远或者直接一直变远的,所以可以三分运动时间求两圆圆心的最近距离,如果两圆最近距离(圆心最近距离-两圆半径)小于1e-6(题干说的条件),则可以碰撞,再以0~达到最近点的时间为区间二分求出碰撞时间,否则直接输出两圆圆心最近距离减去两圆半径之和。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+, M = 1e6+, mod = 1e9+, inf = 1e9+;
typedef long long ll;
double x[], y[], r[], vx[], vy[];
inline double s(double a)
{
return a*a;
}
double d(double t)
{
double x0 = x[] + vx[] * t;
double x1 = x[] + vx[] * t;
double y0 = y[] + vy[] * t;
double y1 = y[] + vy[] * t;
return sqrt(s(x1 - x0) + s(y1 - y0)) - r[] - r[];
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
scanf("%lf%lf%lf%lf%lf", &x[], &y[], &r[], &vx[], &vy[]);
scanf("%lf%lf%lf%lf%lf", &x[], &y[], &r[], &vx[], &vy[]);
double l = , r = 1e10;
while (r - l>1e-)//先三分找最低点
{
double mid1 = l + (r - l) / , mid2 = r - (r - l) / ;
double ans1 = d(mid1), ans2 = d(mid2);
if (ans1 <= ans2) r = mid2;
else l = mid1;
}
if (d(l)>=1e-)printf("%.10lf\n", d(l));
else//二分找0点
{
l = ;
while (r - l > 1e-)
{
double mid = (r + l) / ;
if (d(mid) > )l = mid;
else r = mid;
}
printf("%.10f\n", l);
}
}
}

BNU 51638 Air Hockey 三分二分法的更多相关文章

  1. 贱贱的美团安卓客户端---如何实现让安卓app在应用列表获得较靠前的位置

    起因: 自打愚安我开始使用android设备以来,一直觉得google还算厚道,应用列表里的顺序一直都是依据APP的名称,按照先中文(拼音字母表顺序),后英文(字母表顺序)的原则进行排序的,并没有说G ...

  2. BNU 4260 ——Trick or Treat——————【三分求抛物线顶点】

    ial Judge Prev Submit Status Statistics Discuss Next Type: None   None   Graph Theory       2-SAT   ...

  3. 【单峰函数,三分搜索算法(Ternary_Search)】UVa 1476 - Error Curves

    Josephina is a clever girl and addicted to Machine Learning recently. She pays much attention to a m ...

  4. hdu3756三分基础题

    Dome of Circus Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. 三分搜索-ZOJ LightBulb

    开始算法基础学习的第一天 今天学习的内容是三分搜索 相对来说很基础的内容(还是觉得脑子不够用) 三分搜索主要用于凸函数查找极大值. (盗个图) 如图所示 若要查找该函数的最大值 可以考虑和二分法一样的 ...

  6. hihocoder 第四十周 三分求极值

    题目链接:http://hihocoder.com/contest/hiho40/problem/1 ,一道简单的三分. 题目是在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求 ...

  7. HDU 4355 Party All the Time(三分|二分)

    题意:n个人,都要去參加活动,每一个人都有所在位置xi和Wi,每一个人没走S km,就会产生S^3*Wi的"不舒适度",求在何位置举办活动才干使全部人的"不舒适度&quo ...

  8. 解决adobe air sdk打包 apk后自动在包名前面加上air. (有个点)前缀的问题

    早就找到了这个方法,但是一直忙没心思写博客. 默认情况下,所有 AIR Android 应用程序的包名称都带 air 前缀.若不想使用此默认行为,可将计算机环境变量 AIR_NOANDROIDFLAI ...

  9. adobe air类app 接入腾讯开放平台移动游戏使用带tencent包名前缀的问题

    作者:Panda Fang 出处:http://www.cnblogs.com/lonkiss/p/4209159.html 原创文章,转载请注明作者和出处,未经允许不可用于商业营利活动 ------ ...

随机推荐

  1. 2-SAT的小总结(POJ 3683 POJ 3207)

    记住几个最重要的公式: xANDy=0<=>(x=>y′)AND(y=>x′) xANDy=1<=>(x′=>x)AND(y′=>y) xORy=0&l ...

  2. struts2结果处理、获取参数(二)

    结果处理 1.转发 type可以不写,默认就是转发 <package name="hello" namespace="/hello" extends=&q ...

  3. hibernate_02_session介绍

    什么是session? hibernate的session对象就相当于jdbc的connection.我们对数据库的操作(增删改等)都是使用的session方法. 写一个java类 package c ...

  4. vsftp服务器搭建

    1.FTP的主动模式和被动模式的区别: 最大的区别是数据端口并不总是20, 主动模式和被动模式的优缺点: 主动FTP对FTP服务器的管理和安全很有利,但对客户端的管理不利.因为FTP服务器企图与客户端 ...

  5. 实验0 安装GLUT包及工程的创建与运行

    下面将对Windows下在MicroSoft Visual C++2010(简称MSVC)环境下的OpenGL编程进行简单介绍. 1.安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们 ...

  6. 《计算机图形学基础(OpenGL版)》勘误表

    第1版第1次印刷: 所在页码 所在行 原内容 更正为 41 16 k=Δx/Δy k=Δy/Δx 46 6 s-t=2Δy/Δx(xi+1)+2b+2yi-1 s-t=2Δy/Δx(xi+1)+2b- ...

  7. OAuth四种模式

    授权码模式(authorization code)----适用于网站服务端去oauth服务端申请授权 简化模式(implicit)----没有服务端,js+html页面去oauth服务端申请授权 密码 ...

  8. Arduino ULN2009驱动步进电机

    一.实物图 二.例子代码 注:代码来自老外 http://www.4tronix.co.uk/arduino/Stepper-Motors.php 功能:控制电机正反转 // This Arduino ...

  9. PDF怎么替换页面,教你一招秒实现

    PDF格式是在办公中比较常用的文件格式之一,虽然很好用,也很容易携带,但也容易出现一个问题,当你想要对PDF文件操作或者修改的时候,才发现PDF文件不是那么容易就能进行编辑和修改的,特别是需要对PDF ...

  10. java中反射讲解及实例

    Java反射机制详解 java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实 ...