QOJ.ac

QOJ

حد الوقت: 5.0 s حد الذاكرة: 512 MB مجموع النقاط: 100 قابلة للهجوم ✓

#10209. 圣洁的……硬币

الإحصائيات

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 时,不会放置任何硬币。注意,无论移除多少枚硬币,最多只会放置一枚硬币。

游戏由若干轮组成。每一轮按顺序描述如下:

  1. 在每一轮开始时,将所有硬币设为 inactive
  2. 选择一种硬币类型 $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$ 硬币的位置。
  3. 激活每一个与刚被移除硬币的位置(在步骤 2 和步骤 6 中,包括放置高级硬币的位置)四邻接的 inactive 硬币。
  4. 硬币下落。即,如果一枚硬币位于相邻的空白位置上方,它将被移动到那里;重复此操作直到不再发生变化。显然,最终状态不依赖于移动顺序。
  5. 将每一个不在任何可移除分量中的硬币设为 inactive
  6. 同时移除所有可移除分量,获得得分增量并放置额外生成的硬币。如果没有任何东西可以移除,则该轮结束,否则跳转至步骤 3。

如上所述,有效的操作由 $(t, x)$ 确定,即所选的类型和堆。一个有效的操作必须至少获得 1 点得分增量。如果一轮中没有有效操作,则游戏结束。

在每一轮中,男孩在所有有效操作中选择一个最佳操作。对于两个不同的有效操作 $o_1 = (t_1, x_1)$ 和 $o_2 = (t_2, x_2)$,他按以下方式比较它们:

  1. 如果 $t_1$ 和 $t_2$ 的类别不同,特殊类型优于普通类型。
  2. 如果平局,得分增量不同时,较高的得分增量优于较低的。
  3. 如果仍然平局,且 $t_1$ 和 $t_2$ 不同,则在 $\{X, Y, 1, 10, 100, 5, 50, 500\}$ 中排在左侧的类型更优。
  4. 在其他情况下,较小的 $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)一枚硬币时,它会从堆中移出并放入缓冲区。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.