题号:NC14115
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld
题目描述
无聊的过河船同学和无聊的胀鱼同学非常喜欢打桌上冰球(其实只是喜欢听球碰撞时的声音)。在无聊的一天,无聊的过河船同学想到了一个无聊的玩法:两人同时将两个球放桌面上,同时击出,然后听两颗球撞在一起时的声音。然而他们都对击球的精确度把握得不是很好,所以这两颗球并不一定能相撞。
现在假设桌面无限大,并且绝对光滑,给出两球的初始位置、半径和运动速度,保证两球初始没有接触。无聊的过河船同学想知道两球能否相撞(接触即认为相撞),如果能,他想知道两球相撞的时间(从两人击球时开始计时),如果不能,他想知道全过程中两球距离的最小值,这里两球距离的定义为两球上任取两个点的距离的最小值,数据保证这种情况下答案不小于10-6。请注意,冰球是个圆柱体,从空中往下看就是一个圆,且在这个问题中,冰球的高度可以忽略不计。
输入描述:
第一行是一个正整数T(≤ 10000),表示测试数据的组数,
每组测试数据包含两行,
第i行包含五个绝对值不大于1000的整数x[i],y[i],r[i],vx[i],vy[i],表示第i个球的初始位置、半径和运动速度。
输出描述:
对于每组测试数据,若两球能相撞,输出两球相撞的时间,否则输出全过程中两球距离的最小值,要求相对误差不超过1e-6。也就是说,令输出结果为a,标准答案为b,若满足fabs((a - b)/max(1.0, b))≤1e-6,则输出结果会被认为是正确答案。
示例1
输入
复制
2
0 0 2 1 0
11 0 1 -1 0
0 0 2 1 0
11 5 1 -1 0
输出
复制
4.0000000000
2.0000000000