题目链接
思路
小车能接到的球一定是一段连续的区间
所以我们判断出区间的左右端点
若区间[L,R]内的小球能被接受,因为小球都是在整数点
所以[L,R]内的整数个数就是能接受到的小球的个数
floor®-ceil(L)+1 即可
floor()下取整函数 ceil()上取整函数
R:车刚开始接到球的时候,车尾所在位置
R = S1 - V * t1 + L
t1 = sqrt( 2 * (H-K) / g )
L:在球落地之前,车能到的最靠前的位置
L = S1-V * t2
t2 = sqrt( 2 * H / g )
考虑到精度误差,最终区间为[L-0.0001,R+0.0001]
再注意一下,因为球的范围是[0,n-1],所以L不能<0,R不能>n-1
代码
#include<stdio.h>
#include<math.h>
const double eps=1e-4;
int main()
{
double h,s,v,l,k;
int n;
scanf("%lf%lf%lf%lf%lf%d",&h,&s,&v,&l,&k,&n);
double t1=sqrt((h-k)/5);
double s1=s+l-v*t1+eps;
double t2=sqrt(h/5);
double s2=s-v*t2-eps;
int b=s1>n-1 ? n-1 : floor(s1);
int a=s2<0 ? 0 : ceil(s2);
int ans= s2>n-1 ? 0 : b-a+1;
printf("%d",ans);
}
来源:CSDN
作者:xuxy111
链接:https://blog.csdn.net/xuxy111/article/details/104198684