专栏文章

题解:P14474 拼积木

P14474题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minb20eq
此快照首次捕获于
2025/12/01 23:29
3 个月前
此快照最后确认于
2025/12/01 23:29
3 个月前
查看原文
题外话:如果空格太多的话,答案下界会达到 n3n^3 级别:考虑初始状态是左边一半铺满右边一半空,最终状态是右边一半铺满左边一半空,我们一次操作只会移动空格 O(1)O(1) 距离,而所有空位移动的总距离是 O(n3)O(n^3)。所以问题限制了空格数 500\le 500n/2n/2 级别)
解法如下。首先,我们把状态理解为一个网格图(同时是二分图),每个积木对应一条边。则一个状态是一个匹配边集。求初始状态和最终状态的对称差图,由于匹配中每个点度数 1\le 1,对称差图每个点度数一定 2\le 2。所以图上只可能有四种联通块:
  1. 交替环
  2. 偶交替路
  3. 奇交替路(初始状态边多)
  4. 奇交替路(最终状态边多)
首先,我们可以通过一次操作让对称差图上一条交替路长度减 22(对于“奇交替路(最终状态边多)”这种情况需要去操作目标图倒着移动。移动可逆,所以先用栈记录下来这种移动,实际操作时最后倒着移回去就行。)。所以先通过 n2/2\le n^2/2 次操作消除所有的偶交替路并将所有奇交替路长度减到 11 条边。(11 条边的交替路相当于扣掉/加上一整块积木)
然后我们把对称差图上剩下的长为 11 的奇交替路(其实就是 1×21\times 2 的空格位置)随意配对。这样,我们需要交换一块 1×21\times 2 的积木和一个 1×21\times 2 的空格的位置。我们可以按任意一个曼哈顿距离最短的路线移动,每次交换一块积木和相邻位置的一个 1×21\times 2 空格,每移一格均摊最多操作 22 次。(注意有可能有跨过中间很多个空格的情况,需要特殊处理之后第一个碰到的积木移动)总移动次数 S/2×2×2n\le S/2 \times 2 \times 2nSS 为总空格数)。问题输入限制总空格数 n/2\le n/2 之后是 n2\le n^2
然后就只剩交替环了。这部分套用原来的题(P5372 [SNOI2019] 积木)的做法即可。记得每个积木连通块分别处理。这部分 2n2\le 2n^2
总共操作次数 3.5n2\le 3.5 n^2

评论

0 条评论,欢迎与作者交流。

正在加载评论...