自由落体

落花浮王杯 提交于 2020-02-06 20:04:11

题目链接

洛谷1033

思路

小车能接到的球一定是一段连续的区间
所以我们判断出区间的左右端点
若区间[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);
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!