洛谷 P1033自由落体题解--zhengjun
题目描述
在高为\(H\)的天花板上有\(n\)个小球,体积不计,位置分别为 \(0,1,2,…,n-1\)。在地面上有一个小车(长为\(L\),高为\(K\),距原点距离为\(S_1\))。已知小球下落距离计算公式为\(d=0.5 \times g \times (t^2)\),其中 \(g=10\),\(t\)为下落时间。地面上的小车以速度\(V\)前进。
如下图:
小车与所有小球同时开始运动,当小球距小车的距离 \(\le 0.0001\)(感谢Silver_N修正) 时,即认为小球被小车接受(小球落到地面后不能被接受)。
请你计算出小车能接受到多少个小球。
输入格式
键盘输入:
\(H,S_1,V,L,K,n(l \le H,S_1,V,L,K,n \le 100000)\)
输出格式
屏幕输出:
小车能接受到的小球个数。
输入输出样例
输入 #1 复制
5.0 9.0 5.0 2.5 1.8 5
输出 #1 复制
1
说明/提示
当球落入车的尾部时,算作落入车内。
思路
我还不知道那个 \(0.0001\) 是干啥吃的
反正就这样,可以得出
\(t=\sqrt{\dfrac{d}{0.5g}}=\sqrt{\dfrac{d}5}\)
所以,最先拿到的时间应该是
\(t_1=\sqrt{\dfrac{H-K}5}\)
因为还要考虑小车的高度
而最后拿到的时间就应该是
\(t_2=\sqrt{\dfrac{H}5}\)
所以,最先拿到的地方就是
\(S_1=S_0-t_1\times V+L\)
因为小车还有宽度
而最后拿到的地方就应该是
\(S_2=S_0-t_2\times V\)
好了最后输出这之间有多少球就可以了
代码
#include<bits/stdc++.h>
using namespace std;
double h,s,v,l,k;
int n;
double t1,t2;
int s1,s2;
int main(){
cin>>h>>s>>v>>l>>k>>n;
t1=sqrt((h-k)/5);
t2=sqrt(h/5);
s1=s-t1*v+l;
s2=s-t2*v;
s1=min(s1,n);//边界
s2=max(s2,0);//边界
printf("%d",s1-s2);
return 0;
}