1 条题解

  • 4
    @ 2024-12-18 13:55:06

    震惊,我居然在信息里推物理式子

    其实这一题出题人比较良心,没有卡精度,用double就能过。但这题坑点还是有的。

    首先让我们来推式子。

    对于任意一个小球,下落的时间是一样的,从公式d=0.5×g×(t2)d = 0.5 \times g \times (t ^ 2)

    可得

    t=d0.5gt = \sqrt{\frac{d}{0.5g}}

    因为这题很良心,把gg设为10,于是有

    t=d5t = \sqrt{\frac{d}{5}}

    因为球只要xx轴和车有重合且在那一瞬间的高度h0h _ {0}满足k>=h0>=0k >= h _ {0} >= 0小车即可接住这个球~~(居然不会被车头撞飞)~~,所以小车可以接住小球的时间t0t _ {0}满足

    d5>=t0>=hk5\sqrt{\frac{d}{5}} >= t _ {0} >= \sqrt{\frac{h - k}{5}}

    然后我们就算这个时间段内小车穿过了多少个小球的xx轴就行了,但这似乎有些难度,我们可以把它转换成求哪个编号的球小车最早可以接住,哪个编号的球小车最晚可以接住。

    首先根据上面哪个公式可以得到

    tmin=hk5t _ {min} = \sqrt{\frac{h - k}{5}}

    tmax=h5t _ {max} = \sqrt{\frac{h}{5}}

    最早接住的球的编号ibi _ {b}int(s1tmin×v+l)int(s _ {1} - t _ {min} \times v + l),记住这里要加上ll,因为最早的球可以被车尾接住。

    最晚接住的球的编号iei _ {e}int(s1tmax×v)int(s _ {1} - t _ {max} \times v)

    这里的ib>iei _ {b} > i _ {e}所以答案应该是ibiei _ {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), 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 << endl;
        return 0;
    }
    

    但是到这里就结束了吗?

    我们可以发现这份代码连样例都过不了,因为存在一些特殊情况,如

    ib>ni _ {b} > n

    或是

    ie<0i _ {e} < 0

    也就是我们把一些没有球的xx轴也算成有球并被小车接住了。但这个问题其实很好解决,因为我们只要把极端的ibi _ {b}iei _ {e}处理到边界上就行了。因此,使

    ib=min(ib,n)i _ {b} = \min(i _ {b}, n)

    ie=max(ie,0)i _ {e} = \max(i _ {e}, 0)

    就行了。

    然后就是真正的ACAC代码了

    #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), 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 << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    661
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    4
    已通过
    2
    上传者