hdu 6812 Kindergarten Physics

文章目录

      • 思路
      • ~~碎碎念~~
      • 代码

题目链接

思路

两个质点仅受互相的万有引力,这是一个椭圆运动
选取质心为参考系
设两物体间距为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 

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;
}

你可能感兴趣的:(基本思想)