Rikka 在醒来时发现身上盖着一件充满未来感的外套。 “这里真冷啊。” 这是站在那里的破产男孩发出的声音。 “别露出那种表情……‘破产’对我来说并不意味着什么。我确实花光了钱,但我还有工作……而且没人能因为债务把我从网吧的椅子上拉走。” Rikka 知道他是在强颜欢笑。她太软弱、缺乏经验且天真,不知道该说什么,但至少她能做点什么……清脆的硬币声提醒了她。 “你知道‘硬币格斗’吗?它曾经在地球上很流行……” “我是月球原住民。” “抱歉……但我以为它可能……对现在的你来说是件好事……”Rikka 的声音越来越小。也许她的话伤害了那个现在对“硬币”极其敏感的男孩。 “它的规则是什么?” …… “谢谢你,地球人。”他伸出手,可爱的 Rikka 接住了它,感谢这两个年轻人的相遇。“我们会在命运的十字路口再次相见。” “Jyaou Shingan Wa Saikou Desu!”
这里有 $m$ 堆硬币。每堆最初有 $n$ 枚硬币,但容量无限。它们排列成 $n \times m$ 的网格,作为列。令 $(i, j)$ 为从左到右第 $j$ 堆中从下往上第 $i$ 个位置。当且仅当 $x < x'$ 或 $(x = x', y < y')$ 时,位置 $(x, y)$ 小于 $(x', y')$。
硬币分为两类:普通硬币和特殊硬币。普通硬币按面值分为 6 种类型:$\{1, 5, 10, 50, 100, 500\}$;特殊硬币分为两种类型:$\{X, Y\}$。因此总共有 8 种硬币。
每枚普通硬币要么是 inactive(未激活)的,要么是 active(激活)的,而特殊硬币即使应该被激活也始终是 inactive 的。
普通硬币可以合并为更高级别或根据某些规则移除。每种面值都有一个基本合并阈值,分别为 $\{5, 2, 5, 2, 5, 2\}$。如果一个相同面值的四连通分量(在“说明”部分解释,下同)包含至少一枚 active 硬币,且其大小不小于对应的阈值,则它是可移除的。
在移除一个可移除分量时,可以获得等于其大小的得分增量。此外,如果被移除硬币的面值小于 500,则会生成一枚面值高一级的 active 硬币,并将其放置在被移除硬币所在位置中最小的位置。当被移除硬币的面值为 500 时,不会放置任何硬币。注意,无论移除多少枚硬币,最多只会放置一枚硬币。
游戏由若干轮组成。每一轮按顺序描述如下:
- 在每一轮开始时,将所有硬币设为 inactive。
- 选择一种硬币类型 $t$。然后,将每堆顶部所有类型为 $t$ 的硬币取出(picked);在每一堆中重复此操作直到不再发生变化。令 $c(t)$ 为选择类型 $t$ 时取出的硬币数量。普通类型 $t$ 仅在 $c(t) \ge 1$ 时可选,而特殊类型 $t$ 必须满足 $c(t) \ge 2$ 才能选择。
- 如果 $t$ 是普通类型,应选择一堆 $x$,取出的硬币将立即被放置在堆 $x$ 的顶部并被激活。
- 如果 $t$ 是特殊类型,应选择一个顶部为普通硬币的非空堆 $x$,这也意味着如果不存在这样的堆 $x$,则无法在上述步骤中选择类型 $t$。令 $y$ 为所选堆顶部硬币的类型。 然后,如果 $t$ 是特殊类型,取出的硬币将被移除,玩家将获得其数量的得分增量。 同时,所有类型为 $y$ 的硬币将立即被移除,玩家将获得其数量的得分增量。 此后,如果 $t$ 是类型 $X$ 且 $y$ 的面值小于 500,则会生成面值比 $y$ 高一级的 active 硬币,并占据所有刚被移除的类型 $y$ 硬币的位置。
- 激活每一个与刚被移除硬币的位置(在步骤 2 和步骤 6 中,包括放置高级硬币的位置)四邻接的 inactive 硬币。
- 硬币下落。即,如果一枚硬币位于相邻的空白位置上方,它将被移动到那里;重复此操作直到不再发生变化。显然,最终状态不依赖于移动顺序。
- 将每一个不在任何可移除分量中的硬币设为 inactive。
- 同时移除所有可移除分量,获得得分增量并放置额外生成的硬币。如果没有任何东西可以移除,则该轮结束,否则跳转至步骤 3。
如上所述,有效的操作由 $(t, x)$ 确定,即所选的类型和堆。一个有效的操作必须至少获得 1 点得分增量。如果一轮中没有有效操作,则游戏结束。
在每一轮中,男孩在所有有效操作中选择一个最佳操作。对于两个不同的有效操作 $o_1 = (t_1, x_1)$ 和 $o_2 = (t_2, x_2)$,他按以下方式比较它们:
- 如果 $t_1$ 和 $t_2$ 的类别不同,特殊类型优于普通类型。
- 如果平局,得分增量不同时,较高的得分增量优于较低的。
- 如果仍然平局,且 $t_1$ 和 $t_2$ 不同,则在 $\{X, Y, 1, 10, 100, 5, 50, 500\}$ 中排在左侧的类型更优。
- 在其他情况下,较小的 $x$ 更优。
你能为他们担任裁判吗? 给定初始堆,请实现男孩的操作。你需要计算总轮数。对于每一轮,需要输出所选的类型、堆的索引以及他获得的得分。
输入格式
第一行包含两个整数 $n, m$ ($1 \le n \le 2000, 1 \le m \le 20$),分别为每堆初始硬币数量和堆的数量。 接下来的 $n$ 行,每行包含一个由 $\{A, B, C, D, E, F, X, Y\}$ 组成的字符串,其中字符 $\{A, B, C, D, E, F\}$ 分别指代面值 $\{1, 5, 10, 50, 100, 500\}$,第 $i$ 行的第 $j$ 个字符描述了 $(i, j)$ 处的硬币类型。注意,输入中的字符矩阵是上下颠倒的。 保证最多有 20 枚特殊硬币(即类型为 $X$ 和 $Y$ 的硬币)。
输出格式
第一行输出一个整数 $K$,表示总轮数。 接下来的 $K$ 行,每行包含一个字符和两个整数。字符描述了该轮选择的类型(与输入中的 $\{A, B, C, D, E, F, X, Y\}$ 一致),两个整数分别为所选堆的索引和该轮获得的得分增量。
说明
两个位置 $(x_1, y_1), (x_2, y_2)$ 四邻接,当且仅当 $|x_1 - x_2| + |y_1 - y_2| = 1$。 两个位置 $a, b$ 四连通,当且仅当存在一个位置序列 $a, c, \dots, b$,以 $a$ 开始并以 $b$ 结束,使得序列中每两个相邻位置都是四邻接的。 硬币集合 $S$ 是四连通的,当且仅当其中每两个硬币的位置都是四连通的。 四连通分量是一个四连通硬币集合,使得不存在其四连通真超集。 位置 $(x_1, y_1)$ 在 $(x_2, y_2)$ 上方,当且仅当 $x_1 = x_2 + 1, y_1 = y_2$。 在步骤 2 中,当你取出(pick)一枚硬币时,它会从堆中移出并放入缓冲区。