P16489 [GKS 2014 #C] Tetris

题目描述

俄罗斯方块(Tetris)是一款著名的电子游戏,几乎每个人都玩过。在本题中,你需要模拟它的一个简化版本。 在我们的版本中,游戏在一个宽度为 $W$、高度为 $H$ 的场地中进行,并受到重力影响。最初,场地是空的。随后,四格骨牌开始从场地上方依次下落。每个四格骨牌一旦接触到其他四格骨牌或场地底部就会立即停止。 游戏有一个有趣的特性叫做“消除行”。一旦某一行被四格骨牌填满,它就会被消除。一次可能消除多行。例如: ``` |..............| |..............| |..............| |.............o| |..............| |..............| |.............o| |..............| |..............| |.............o| |..............| |..............| |.............o| |..............| |..............| |..xx..........| --> |..xx..........| --> |..............| |xxxxxxxxxxxxx.| |xxxxxxxxxxxxxo| |..............| |xxxxxxxxxxxxx.| |xxxxxxxxxxxxxo| |..xx..........| |xx..xxxxxxxxx.| |xx..xxxxxxxxxo| |xx..xxxxxxxxxo| |xxxxxxxxxxx...| |xxxxxxxxxxx..o| |xxxxxxxxxxx..o| ---------------- ---------------- ---------------- 下落中 停止 消除了 2 行 ``` 注意,在此简化版本中,消除行后“悬空”的四格骨牌方块不会继续下落。这就是为什么最顶上的两个方块会保持在原位。因此,尽管在原版俄罗斯方块中会发生连锁消除,这里并不会发生。 当所有给定的四格骨牌都放置完毕,或者由于达到场地高度限制而无法放置当前四格骨牌时,游戏结束。 在本题中,每个四格骨牌的类型、旋转角度以及下落位置均由输入给出。它们将从场地的**上方**开始下落。你的目标是模拟并得出每局游戏的最终结果。

输入格式

``` 1 2 3 4 5 6 7 x x x x xx x x xx xx x x xx x xxx x x xx xx x x ``` 四格骨牌的旋转由一个数字 $r$ 表示。$r$ 可以是 $0$、$1$、$2$ 或 $3$。旋转方向为逆时针。例如: ``` r=0 r=1 r=2 r=3 x x xxx x xxx xx x xx x x x xx x xx xx xx xx xx x x ``` 水平下落位置由一个数字 $x$ 表示。它是四格骨牌包围盒左下角方块的坐标。此处 $x$ 从 $0$ 开始。 输入的第一行给出测试用例的数量 $T$。对于每个测试用例,第一行输入包含 $3$ 个整数 $W$、$H$、$N$。$W$ 是宽度,$H$ 是高度,$N$ 是将要下落的方块数量。 接下来的 $N$ 行,每行包含 $3$ 个整数 $t_i$、$r_i$、$x_i$。$t_i$ 指明四格骨牌的类型。$r_i$ 是该四格骨牌的旋转角度。$x_i$ 是该四格骨牌的水平下落位置。保证 $x_i$ 会使四格骨牌在水平方向上位于场地内部。

输出格式

对于每个测试用例,首先输出一行“Case #i:”,其中 i 是测试用例编号(从 $1$ 开始)。然后,如果游戏在 $N$ 个方块下落之前结束,输出“Game Over!”(不含引号)。否则,输出游戏场地的最终状态,状态应包含 $H$ 行,每行 $W$ 个字符。每个字符可以是 '.' 或 'x'。

说明/提示

### 限制 $1 \le T \le 100$ $1 \le t_i \le 7$ $0 \le r_i < 4$ **小数据集(测试集 1 - 可见)** $4 \le W \le 20$ $1 \le H \le 20$ $0 \le N \le 100$ **大数据集(测试集 2 - 隐藏)** $4 \le W \le 100$ $1 \le H \le 100$ $0 \le N \le 5000$ 翻译由 DeepSeek V4 Pro 完成