题目链接: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;
}
撒花~