题解:CF1819B The Butcher
lcfollower · · 题解
玩 duel 碰到的题,写 TJ 纪念。
首先考虑到这题不像贪心、DP 之类的,我们直接考虑是否存在结论。
有个结论就是最多只有两个答案。
:::info[证明]{open}
假设有一个
考虑手玩第一次操作,我们发现第一次操作后丢进盒子的那个矩形要么行为
也即是这个矩形在所有被丢弃进盒子中的矩形内,要么行数最大,要么列数最大。
我们就能得到可能的最大行数
考虑到总面积
-
长
mxx ,宽\frac{S}{mxx} ,且\frac{S}{mxx} 为整数。 -
长
\frac{S}{mxy} ,宽mxy ,且\frac{S}{mxy} 为整数。
:::
现在我们需要做的就是如何判断一个矩形是否能够被切割为若干的
我们用 check(r ,c) 表示当前
我们找到没用过的矩形中,最大的行数 false。
然后我们递归处理即可。
返回 true 你手玩会发现当
时间复杂度为
Submission.
很好理解我就不做解释了。
然后考虑每次找很烦。
我们可以用优先队列搞,按行数或者列数从大到小排序。
对于队头,如果用过,我们直接弹出;否则直接按照上面的判断即可。
时间复杂度为
Submission.