#548. 俄罗斯方块

    ID: 548 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>基础算法模拟CCF CSP认证第 7 次CCF CSP软件能力认证

俄罗斯方块

问题描述

俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。

游戏在一个 15151010 列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者没有放置方块。

每一轮,都会有一个新的由 44 个小方块组成的板块从方格图的上方落下,玩家可以操作板块左右移动放到合适的位置,当板块中某一个方块的下边缘与方格图上的方块上边缘重合或者达到下边界时,板块不再移动,如果此时方格图的某一行全放满了方块,则该行被消除并得分。

在这个问题中,你需要写一个程序来模拟板块下落,你不需要处理玩家的操作,也不需要处理消行和得分。

具体的,给定一个初始的方格图,以及一个板块的形状和它下落的初始位置,你要给出最终的方格图。

输入格式

输入的前 1515 行包含初始的方格图,每行包含 1010 个数字,相邻的数字用空格分隔。 如果一个数字是 00,表示对应的方格中没有方块。 如果数字是 11,表示初始的时候有方块。 输入保证前 44 行中的数字都是 00

输入的第 1616 至第 1919 行包含新加入的板块的形状,每行包含 44 个数字,组成了板块图案。 00 表示没方块,11 表示有方块。 输入保证板块的图案中正好包含 44 个方块,且 4 个方块是连在一起的(四连通,即标准俄罗斯方块)。

2020 行包含一个 1177 之间的整数,表示板块图案最左边开始的时候是在方格图的哪一列中。 注意,这里的板块图案指的是第 16161919 行所输入的板块图案,如果板块图案的最左边一列全是 00,则实际板块的左边位置需要右移至第一个非零列。

方格图共 1010 列,从左到右依次为第 1101\sim10 列。

输出格式

输出 1515 行,每行 1010 个数字,相邻的数字之间用一个空格分隔,表示板块下落后的方格图。 注意不需要处理最终的消行。

样例输入

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
1 1 1 0 0 0 1 1 1 1
0 0 0 0 1 0 0 0 0 0
0 0 0 0
0 1 1 1
0 0 0 1
0 0 0 0
3

样例输出

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 1 0 0 0 0

说明

本样例中,给定的 4×44\times4 板块图案的最左边位于方格图的第 33 列,实际板块的最左端其实位于方格图的第 44 列。