思路
两个质点仅受互相的万有引力,这是一个椭圆运动
选取质心为参考系
设两物体间距为d,质量分别为ma和mb,
则物体到质心的距离为r = d / 2
物体b的受力为F=G M_A/ d2= G (M_A/4)/ r2
即物体B等同于受到一个固定于质心处的质量为M_A/4的物体的万有引力作用,我们知道,这种情况下,B做一个以这个固定为焦点的圆锥曲线运动,而在我们讨论的情况下,由于总机械能量小于0(无初速),因此是一个椭圆轨道,而且这个椭圆轨道是一个极扁的轨道,扁到了变成了直线运动,而质心所在既是椭圆轨道的焦点,也是轨道的近地点,因此轨道的半长轴为D/4,D为AB的初始距离。代入椭圆轨道行星公转周期公式:
T
=
2
π
(
a
3
/
G
M
)
T=2 \pi \sqrt(a^3/GM)
T=2π(a3/GM),
a为半长轴,M为中心恒星的质量
B从静止到A,是一个由远地点到近地点的过程
但是
允许最大误差是1e-6,
两物体的碰撞时间可以由上面进行推导
t
=
π
(
(
D
/
4
)
3
/
G
(
M
A
/
4
)
)
=
π
/
4
(
D
3
/
G
M
A
)
t=\pi \sqrt((D/4)^3/G(M_A/4) )=\pi/4 \sqrt(D^3/G M_A)
t=π((D/4)3/G(MA/4))=π/4(D3/GMA)
带入两物体间距和MA质量即可得出两物体碰撞事件
在最坏情况下,两物体的移动距离也远小于1e-6
所以,直接输出两物体间距即可
碎碎念
一开始没注意样例已经给出了最坏情况,我们傻fufu地推了半天公式QwQ
代码
#include <bits/stdc++.h >
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int a, b, d, t0;
cin >> a >> b >> d >> t0;
cout << d << endl;
}
return 0;
}