CF2232D Magical Tiered Cake
题目描述
Alice 完成了一个有 $n$ 层的魔法分层蛋糕,每一层都比下面的所有层都小(即第 $1$ 层最小,第 $n$ 层最大)。现在她需要你的帮助,将蛋糕从厨房运送到派对现场。由于无法一次搬运整个蛋糕,她还为你准备了一个仓库,以辅助运输过程。
由于蛋糕具有魔力,第 $i$ 层蛋糕可移动,当且仅当它上方恰好有 $a_i$ 层蛋糕。
每一步操作中,你可以选择任意一个位置上的正好可移动的蛋糕层,将其移动到另一个位置上分层蛋糕的顶部。然而,为了维持蛋糕的结构,如果目标位置已有分层蛋糕,被移动的蛋糕层必须放在一个比它严格更大的蛋糕层上。例如,你不能将尺寸为 $4$ 的蛋糕层放在已存在尺寸为 $3$ 的层的顶部。
由于派对即将开始,我们必须尽快行动。请你帮助 Alice 在 $2^n$ 步内将蛋糕全部运输至派对现场,否则请报告不可能。
输入格式
每个测试包含多个测试用例。第一行包含测试用例个数 $t$($1 \le t \le 10000$)。接下来是各个测试用例的数据。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 20$),表示魔法分层蛋糕的层数。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \leq a_i \leq n$),表示第 $i$ 层蛋糕需要上面恰好有多少层蛋糕才可被移动。
保证所有测试用例的 $2^n$ 之和不超过 $2^{20}$。
输出格式
对于每个测试用例,如果无法将蛋糕移动到派对现场,输出 NO。
否则,第一行输出 YES。
接下来一行输出一个整数 $k$($0 \leq k \leq 2^n$),表示你移动蛋糕的步数。
接下来的 $k$ 行,每行输出三个整数 $\mathrm{id}$, $\mathrm{from}$, $\mathrm{to}$($1 \le \mathrm{id} \le n, 1 \le \mathrm{from}, \mathrm{to} \le 3$),表示你将编号为 $\mathrm{id}$ 的蛋糕层从 $\mathrm{from}$ 位置移动到 $\mathrm{to}$ 位置。$1$ 代表 Alice 的厨房,$2$ 代表仓库,$3$ 代表派对现场。
说明/提示
下图为测试用例 $1$ 和 $2$ 的解决方案动画演示:
 
对于第三组样例,可以证明无法将所有蛋糕层移至派对现场。
由 ChatGPT 5 翻译