乒乓球题解
这题难点在于难以完全想清楚所有情况。
我们需要判断的是:第一次落点的位置,能否越过桌面上的网,以及第二次能否落在桌面上。只要判断清楚了这些情况就没有问题。
假设乒乓球第一次反弹的水平飞行的距离是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"; } };