题目描述
在高为 �H 的天花板上有 �n 个小球,体积不计,位置分别为 0,1,2,⋯ ,�−10,1,2,⋯,n−1。在地面上有一个小车(长为 �L,高为 �K,距原点距离为 �1S1)。已知小球下落距离计算公式为 �=0.5×�×(�2)d=0.5×g×(t2),其中 �=10g=10,�t 为下落时间。地面上的小车以速度 �V 前进。
如下图:
小车与所有小球同时开始运动,当小球距小车的距离 ≤0.0001≤0.0001 (感谢 Silver_N 修正) 时,即认为小球被小车接受(小球落到地面后不能被接受)。
请你计算出小车能接受到多少个小球。
输入格式
�,�1,�,�,�,�H,S1,V,L,K,n(1≤�,�1,�,�,�,�≤1000001≤H,S1,V,L,K,n≤100000)
输出格式
小车能接受到的小球个数。
输入输出样例
输入 #1复制
5.0 9.0 5.0 2.5 1.8 5
输出 #1复制
1
说明/提示
当球落入车的尾部时,算作落入车内。
【题目来源】
NOIP 2002 提高组第三题
位移(X)公式:�=�₀�+0.5��²X=V₀t+0.5at²,其中V₀是初速度,t为时间,a为加速度。
而自由落体(就是小球下落)的初速度为0,加速度等于重力加速度g
由此得知,自由落体运动位移(Y)公式:�=0.5��²Y=0.5gt²
基本的公式知道了我们就可以解决题目了了。
我们先读入double型变量H,S,V,L,K,n。
我们知道车高为k,故小球下落的最短运动距离为����((ℎ−�)/5sqrt((h−k)/5,那么此时接住小球编号为�−�∗(����((ℎ−�)/5)+�)s−v∗(sqrt((h−k)/5)+l);
最长运动距离为����(ℎ/5)sqrt(h/5),接住的小球编号为�−�∗����(ℎ/5)s−v∗sqrt(h/5)。
由于接住的小球编号不会超过�−1n−1也不会小于0(PS:编号是0—n-1!!!),所以最大的接住数量为�−1−0+1n−1−0+1即n个.
代码如下:
#include<bits/stdc++.h>
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);
e=fmax(e,0);
printf("%d",s-e);
return 0;
}
拜拜!