#P15695. [2018 KAIST RUN Spring] PuyoPuyo

[2018 KAIST RUN Spring] PuyoPuyo

说明

:::align{center}

图:PuyoPuyo 游戏截图。该游戏使用 12×612 \times 6 的网格,共有 44 种颜色。 :::

PuyoPuyo 是由 Compile Co., Ltd. 制作的一款著名系列视频游戏。首款游戏于 1991 年发布。该公司已于 2003 年解散,但 PuyoPuyo 团队至今(2018 年)仍在 Sonic Team™ 下继续制作游戏。

PuyoPuyo 是一款双人对战游戏。每位玩家通过向网格中放置 Puyo 来进行游戏。详细的游戏规则如下:

  • 游戏开始时网格为空。
  • Puyo 是一种圆形的、类似史莱姆的物体,从网格上方落下。
  • 每个 Puyo 具有一种颜色。
  • 共有 KK 种颜色的 Puyo。
  • Puyo 以一对(两个 Puyo)为单位进行操控。
  • 可以使用游戏控制器移动、下落或旋转 Puyo 对。
  • 在屏幕最顶部,Puyo 对可以水平移动,并且可以水平或垂直旋转。
  • 当你下落 Puyo 时,每个 Puyo 会分别下落,直到接触到另一个 Puyo 或网格底部。
  • 你可以将 Puyo 放置在网格之外,但只能在网格正上方。
  • 四个或更多颜色相同且共享一条边的 Puyo 被称为一个,这样的组会被消除。此过程称为消除
  • 如果下落一个 Puyo 对导致形成两个或更多组,它们会同时被消除。
  • 组消除后,剩余的 Puyo 会下落至另一个 Puyo 或网格底部。如果这形成了新的组,则重复相同的过程。此过程称为连锁
  • 在连锁期间,你不能放置另一个 Puyo 对。

Sonic Team™ 请求你帮助制作 PPAP(Puyo Puyo 打印算法)。该算法不会用于游戏软件,而是用于特殊仪式。

你将获得一个 R×CR \times C 的网格。每个格子要么填充了特定颜色的 Puyo,要么是空的。你需要通过下落 Puyo 对来推导出给定的网格。在最终状态下,每个 Puyo 都必须在网格内。

幸运的是,你可以选择下落哪种颜色以及放置在何处。

输入格式

输入包含 R+1R + 1 行。

第一行包含三个由空格分隔的整数 RRCCKK

接下来 RR 行描述了最终网格。每行包含 CC 个由空格分隔的整数。每种颜色用 11KK 之间的整数表示。00 表示空格子。

给定的最终网格可以通过不超过 250 次 Puyo 对下落来形成。

输出格式

第一行,你必须输出 Puyo 对的数量 DD

接下来的 DD 行,每行输出四个由空格分隔的整数。

  • 如果你水平放置 Puyo 对,第一个数字是 00。如果垂直放置,第一个数字是 11
  • 第二个数字表示左方(水平时)或上方(垂直时)Puyo 的行号
  • 第三个数字表示该对中左方或上方 Puyo 的颜色。
  • 第四个数字表示该对中右方或下方 Puyo 的颜色。
4 4 3
0 0 0 0
0 0 0 0
0 0 0 0
0 1 0 1
5
0 2 1 2
1 4 1 2
0 2 2 3
1 3 3 3
1 3 2 3

提示

在此样例中,Puyo 的下落过程如下:

:::align{center} :::

数据范围

  • 3K63 \le K \le 6
  • R=C=4R = C = 4R=C=20R = C = 20
  • D250D \le 250(你必须使用 250 个或更少的 Puyo 对。)

翻译由 DeepSeek V3.2 完成