结论题。
首先第一次放置一定处于中间,即 \(pos = \lfloor \dfrac{m+1}{2} \rfloor\) 处,其中 \(pos\) 为当前放置的位置。
接下来要放置的位置可能在现在位置的左边或右边。
我们可以猜测到最终的放置方式应当为先左后右,以此类推。
进一步的:
-
若 \(pos\) 左边对称的篮筐没有被放置(判断 \(pos\) 是否 \(<mid\),是则被放置了。\(mid\) 为正中间的位置),则根据题目给出的优先级,接下来一定放置在其对称的左边篮筐,即 \(m-pos\) 处;
-
否则放在它右边对称的的篮框中,即 \(m-pos+1\) 处。
上面的结论建议自行画图理解。
同时,还有一个特判,就是当 \(pos=m\) 时(说明所有篮筐都放了一遍),则需要令 \(pos=mid\)(即重新开始放一轮)。
有了上面的结论,代码就很好写了。时间复杂度 \(O(n)\)。