自由落体

点击跟博主一起玩(zuo)耍(si)
这道题第一眼看上去挺唬人的。什么0.0001,什么自由落体什么速度V前进的,第一反应就是数学题然后运用动归(前后走)来进行解决。
但是仔细看看题目和数据范围,你会发现这就是个模拟。
首先预处理小球掉落时间和小车到达时间。若0<=x<=0.0001时,小车能接到球反之不行。因为小车速度不变我们只需要预处理小球掉落时间+模拟小车走动就可以在O(n)的时间内解决问题而不需要进行动态规划。
代码

#include <iostream>
#include <cmath>
#include <algorithm>
const int  ebs= 1e-5;

using namespace std;

double h, n, k, l, s1, v, p1, p2, t1, t2;
int ans;

int main()
{
    cin>>h>>s1>>v>>l>>k>>n;
    p1 = s1, p2 = s1+l;
    t1 = sqrt(2*(h-k)/10);
    t2 = sqrt(2*h/10);
    if (t1 >= 0) p2 -= (v*t1);
    p1 -= (v*t2);
    if (!(p2 < 0 && fabs(p2) > ebs) && !(p1 > n-1 && fabs(p1-n+1) > ebs)) 
    {
        if (p1-floor(p1) <= ebs) p1 = floor(p1);
        if (ceil(p2)-p2 <= ebs) p2 = ceil(p2);
        if (p1 < 0) p1 = 0;
        if (p2 > n-1) p2 = n-1;
        ans = floor(p2) - ceil(p1) + 1;
    }
    cout << ans;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值