洛谷P1033 自由落體 題解
阿新 • • 發佈:2018-12-10
題目連結:https://www.luogu.org/problemnew/show/P1033
呵呵,真的學好物理比較重要,前些年卡在這題上的我今天終於會做了,可惡的自由落體(也許是我太弱了吧 )
分析:
這道題似乎並不用特意在乎精度,只是提醒大家一點:能全用double儘量都用,這樣能避免中間轉換是不必要的精度問題。
公式的推導相信大家都會吧,這裡不再贅述,也會在程式碼中詳細說明。
下面見程式碼
程式碼:
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
double h,s1,v,l,k,n;
scanf("%lf%lf%lf%lf%lf%lf",&h,&s1,&v,&l,&k,&n);
double Maxtime=sqrt(h/5);//由題目給出的公式不難得出:球落地前的最大時間
double Mintime=sqrt((h-k)/5);//因為小車的高度要考慮,所以還要算出最短的時間
int s=int(s1-Mintime*v+l);//那麼這就是最早的小球了
int e=int(s1-Maxtime*v);//這個是最晚的?
s=fmin(s,n);//這裡需要考慮不要把x軸的算進來
e=fmax(e,0) ;
printf("%d",s-e);//最終的個數就是最早接球的編號-最晚的了
return 0;
}
撒花~