乒乓球题解

这题难点在于难以完全想清楚所有情况。
我们需要判断的是:第一次落点的位置,能否越过桌面上的网,以及第二次能否落在桌面上。只要判断清楚了这些情况就没有问题。
图片说明
假设乒乓球第一次反弹的水平飞行的距离是sh,那么它到第二次反弹总共会飞行3*sh,可以从图中清楚的看到。
有三个关键点:
第一个是乒乓球第一次反弹的位置一定不能小于左边的乒乓球台,因为那样会直接落地而没有机会反弹,也就是第一次反弹的水平飞行距离。这里暂时不用考虑具体落在哪里。
第二个是球网的位置
球网一定要落在区间q内,否则会触网而无法到达右边的球台。这里的关系
图片说明
s通过简单的物理计算即可算出。
第三个是乒乓球第二次反弹的位置不能大于右边球台的位置,否则落在球台外面,这 里的关系是
时间复杂度是,空间复杂度

class Solution {
public:
    string PlayPingPong(int v, int y, int w, int x, int h) {
        // write code here
        double t = sqrt(y / 5.0),sh = v * t,t1 = sqrt((y-h) / 5.0),s = sh-v * t1;
        return (sh < w||!(w + x > sh + s && w + x < 3 * sh - s)||3 * sh > w + 2 * x)? "NO":"YES";
    }
};
全部评论

相关推荐

11-20 17:33
已编辑
门头沟学院 嵌入式工程师
小米汽车 底软测开岗 n*15(15大概率拿不到) 双非硕
点赞 评论 收藏
分享
shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务