hdu2020 round4 Kindergarten Physics

问题描述

张三参加了不朽物理奥林匹克运动会。比赛的第0个问题如下。

有两个球分别重一公斤和二公斤。在这个问题中,它们可以被看作是粒子,因为它们足够小。在一开始(即t=0),两个球之间的距离为d km,并且两个球都不移动。

假设在这个系统中只有引力起作用(不考虑其他物体或其他力)。两个球从t=0开始移动。你的任务是当t=t0(s)时计算它们之间的距离。

帮张三解决问题!

以下信息可能有助于解决问题。

-万有引力公式:F=G⋅m1⋅m2/r2

-重力常数:G=6.67430×10−11m3/(kg⋅s2)

输入

输入的第一行给出测试用例数T(1≤T≤100)。T测试用例如下。

对于每个测试用例,唯一的一行包含四个整数a,b,d,t0(1≤a,b,d,t0≤100),表示两个球的质量,它们之间的初始距离,以及球移动的时间。

保证两个球在(t0+1)秒内不会相撞。

输出

对于每个测试用例,用实数x打印一条线,表示距离是x km。

你的答案的绝对或相对误差应不超过10-6。

思路

刚看到题觉得物理题公式推一下就好了。最后推出一个一元三次方程,在我还在思考怎么解时,队友说过了。t0<=100,位移小,加速度变化忽略,当匀加速就行了。直接r=d-a1t0 ^ 2/2-a2t0 ^2/2.稍稍怀疑了下人生,阿巴阿巴。
代码:



#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=55;
const int
inf=0x3f3f3f3f;
const int
mod=1e9+7;
const double
G=6.6743;
inline int
rd(){
register int s=0,w=1;
register char ch=getchar();   
while(ch<'0'||ch>'9')
    {
if(ch=='-') w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
s=s*10+ch-'0';       
ch=getchar();   
}   
return s*w;
}
int main() {   
int t;
    t=rd();   
while(t--)   
{
    double a,b,d,t;
     a=rd(),b=rd(),d=rd(),t=rd();       
double x=d*1000;
x=x*x;
double s=(G*0.5*t*t*(a+b)/x)/100000000000;
    //printf("%.20f\n",s);
//d=d-s;
printf("%.20f\n",d-s);
}   
return 0;
}

猜你喜欢

转载自blog.csdn.net/Nefeertari/article/details/107707333