QOJ.ac

QOJ

時間限制: 1.0 s 記憶體限制: 512 MB 總分: 100 可 Hack ✓

#9841. 优雅的俄罗斯方块

统计

俄罗斯方块(Tetris)是一款经典的益智电子游戏。在俄罗斯方块中,玩家通过将不同形状的方块(称为 tetrominoes)降落到游戏区域来填满行。填满的行会消失并为玩家提供分数。

Elegant Tetris 是俄罗斯方块的一个略有不同的变体。在 Elegant Tetris 中,你需要为每一个落下的方块选择形状、旋转次数以及降落位置。

共有 7 种不同的方块形状,每种形状由一个大写字母表示,如图 T-1 所示。

T-1

在决定方块形状后,你可以选择将该方块旋转多少次。每个方块至少旋转 0 次,最多旋转 3 次。每次旋转将方块顺时针旋转 $90^\circ$。例如,O 型方块旋转后不会改变,但 L 型方块的旋转变化如图 T-2 所示。

T-2

然后你可以决定方块降落的位置。当方块触及游戏区域底部或其他方块时,它会停止。注意,在 Elegant Tetris 中,方块在下降过程中不能水平移动。例如,如图 T-3 所示,T 型方块在普通俄罗斯方块中可以放置在 $1 \times 1$ 的方块下方,但在 Elegant Tetris 中则不行。

T-3

当落下的方块停止后,所有已完成(完全填满)的行会消失,上方的行会下落,如图 T-4 所示。如果在此之后仍有高度不小于 20 的填充方块,则游戏结束。

T-4

给定一个宽度为 $w$ 且已有部分方块填充的初始游戏区域,Nikuniku 想知道如何通过不少于 1 次且不超过 10000 次的移动,在不触发游戏结束的前提下,回到初始的游戏区域状态。

输入格式

第一行包含两个整数 $w$ ($4 \le w \le 1000$) 和 $n$ ($0 \le n \le 15$),其中 $w$ 是游戏区域的宽度。

接下来的 $n$ 行,每行包含一个长度为 $w$ 的字符串,表示游戏区域最底部的 $n$ 行。字符串由两个符号 ‘#’ 和 ‘.’ 组成。‘#’ 表示该位置有方块,‘.’ 表示为空。初始游戏区域中没有完全填满的行。初始游戏区域中高度 $n$ 以上的所有行均为空。

保证该挑战有解。注意,不保证存在从空游戏区域到达初始游戏区域的移动序列。

输出格式

第一行输出一个整数 $len$ ($1 \le len \le 10000$),表示进行的移动次数。注意 $len$ 不必是可能的最小移动次数。

接下来的 $len$ 行,每行输出一个大写字母 $ch$ ($ch \in \{‘L’, ‘J’, ‘O’, ‘S’, ‘Z’, ‘T’, ‘I’\}$) 和两个整数 $a$ ($0 \le a \le 3$) 以及 $x$ ($1 \le x \le w$),中间用空格分隔,分别表示方块形状、旋转次数和最左侧方块的坐标。

样例

样例输入 1

5 2
#....
.#..#

样例输出 1

5
Z 0 2
O 0 4
L 1 1
S 1 1
J 3 3

样例输入 2

5 4
#....
###..
####.
#..#.

样例输出 2

5
L 2 4
L 0 4
O 0 2
L 1 1
J 1 1

说明

下图展示了第一个样例测试用例的情况。

T-5

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.