洛谷P1033自由落体题解--zhengjun

题目描述

在高为 H H 的天花板上有 n n 个小球,体积不计,位置分别为 0 , 1 , 2 , , n 1 0,1,2,…,n-1 。在地面上有一个小车(长为 L L ,高为 K K ,距原点距离为 S 1 S_1 )。已知小球下落距离计算公式为 d = 0.5 × g × ( t 2 ) d=0.5 \times g \times (t^2) ,其中 g = 10 g=10 t t 为下落时间。地面上的小车以速度 V V 前进。

如下图:

A_zjzj

小车与所有小球同时开始运动,当小球距小车的距离 0.0001 \le 0.0001 (感谢Silver_N修正) 时,即认为小球被小车接受(小球落到地面后不能被接受)。

请你计算出小车能接受到多少个小球。

输入格式

键盘输入:

H , S 1 , V , L , K , n ( l H , S 1 , V , L , K , n 100000 ) 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 0.0001 是干啥吃的
反正就这样,可以得出

t = d 0.5 g = d 5 t=\sqrt{\dfrac{d}{0.5g}}=\sqrt{\dfrac{d}5}

所以,最先拿到的时间应该是

t 1 = H K 5 t_1=\sqrt{\dfrac{H-K}5}

因为还要考虑小车的高度

最后拿到的时间就应该是

t 2 = H 5 t_2=\sqrt{\dfrac{H}5}

所以,最先拿到的地方就是

S 1 = S 0 t 1 × V + L S_1=S_0-t_1\times V+L

因为小车还有宽度

最后拿到的地方就应该是

S 2 = S 0 t 2 × V 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

发布了48 篇原创文章 · 获赞 49 · 访问量 2134

猜你喜欢

转载自blog.csdn.net/A_zjzj/article/details/104838058
今日推荐