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 完成