题目描述
在高为 HH 的天花板上有 nn 个小球,体积不计,位置分别为 0,1,2,⋯ ,n−1。在地面上有一个小车(长为 L,高为 K,距原点距离为 (S1)。已知小球下落距离计算公式为 d=0.5×g×(t2),其中 g=10,tt 为下落时间。地面上的小车以速度 VV 前进。
如下图:
小车与所有小球同时开始运动,当小球距小车的距离 ≤0.0001(感谢 Silver_N 修正) 时,即认为小球被小车接受(小球落到地面后不能被接受)。
请你计算出小车能接受到多少个小球。
输入格式
H,S1,V,L,K,n(1≤H,S1,V,L,K,n≤100000)
输出格式
小车能接受到的小球个数。
输入输出样例
输入 #1
5.0 9.0 5.0 2.5 1.8 5
输出 #1
1
说明/提示
当球落入车的尾部时,算作落入车内。
【题目来源】
NOIP 2002 提高组第三题
在这里提前说一下,如果这篇题解过了,那
本蒟蒻就累计通过题解33篇了!| 本蒟蒻就累计通过题解30篇了!|
这一题呢,要用到double的地方比较多,反而不用怎么在意精度...
其实我是用了贪心的思想(程序里说),考虑到最早接的球和最晚的球中间一定都能接到
所以我的代码是这样的:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath> //打好文件头
using namespace std;
double gao,s1,su_du,l,k,n; //用double来定义变量
int main()
{
scanf("%lf%lf%lf%lf%lf%lf",&gao,&s1,&su_du,&l,&k,&n); //输入
double Maxtime=sqrt(gao/5); //球落地前的最大时间
double Mintime=sqrt((gao-k)/5); //这里还是要算出最短的时间的
int Fast_ball=int(s1-Mintime*su_du+l); //最早的小球用变量记录下来
int Late_ball=int(s1-Maxtime*su_du); //最晚的小球也要用变量记录下来
Fast_ball=fmin(Fast_ball,n); //这两个英文翻译你给多少分?
Late_ball=fmax(Late_ball,0); //你能活到( )岁[括号里就是给出的分数]
printf("%d",Fast_ball-Late_ball); //最后输出最早接球的编号减最晚的
return 0; //这就完美结束啦~
}
在百忙之中写一篇题解也比较辛苦,别忘了点个赞!