洛谷 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\)前进。

如下图:

A_zjzj

小车与所有小球同时开始运动,当小球距小车的距离 \(\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;
}

谢谢--zhengjun

posted @ 2022-06-10 19:06  A_zjzj  阅读(29)  评论(0编辑  收藏  举报