1 条题解
-
0
自动搬运
来自洛谷,原作者为

zhenglier
**搬运于
2025-08-24 21:20:09,当前版本为作者最后更新于2018-10-17 18:41:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
震惊,我居然在信息里推物理式子其实这一题出题人比较良心,没有卡精度,用double就能过。但这题坑点还是有的。
首先让我们来推式子。
对于任意一个小球,下落的时间是一样的,从公式
可得
因为这题很良心,把设为10,于是有
因为球只要轴和车有重合且在那一瞬间的高度满足小车即可接住这个球~~(居然不会被车头撞飞)~~,所以小车可以接住小球的时间满足
然后我们就算这个时间段内小车穿过了多少个小球的轴就行了,但这似乎有些难度,我们可以把它转换成求哪个编号的球小车最早可以接住,哪个编号的球小车最晚可以接住。
首先根据上面哪个公式可以得到
最早接住的球的编号为,记住这里要加上l,因为最早的球可以被车尾接住。
最晚接住的球的编号为。
这里的所以答案应该是
然后我们就有代码了
#include<bits/stdc++.h> using namespace std; int n; double h,s1,v,l,k; int main() { cin>>h>>s1>>v>>l>>k>>n; double t_max=sqrt(h/5); double t_min=sqrt((h-k)/5); int i_b=int(s1-t_min*v+l),i_e=int(s1-t_max*v); cout<<i_b-i_e; }但是到这里就结束了吗?
我们可以发现这份代码连样例都过不了,因为存在一些特殊情况,如
或是
也就是我们把一些没有球的轴也算成有球并被小车接住了。但这个问题其实很好解决,因为我们只要把极端的和处理到边界上就行了。因此,使
就行了。
然后就是真正的代码了
#include<bits/stdc++.h> using namespace std; int n; double h,s1,v,l,k; int main() { cin>>h>>s1>>v>>l>>k>>n; double t_max=sqrt(h/5); double t_min=sqrt((h-k)/5); int i_b=int(s1-t_min*v+l),i_e=int(s1-t_max*v); i_b=min(i_b,n);i_e=max(i_e,0); cout<<i_b-i_e; }
- 1
信息
- ID
- 35
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者