#548. 俄罗斯方块
俄罗斯方块
问题描述
俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。
游戏在一个 行 列的方格图上进行,方格图上的每一个格子可能已经放置了方块,或者没有放置方块。
每一轮,都会有一个新的由 个小方块组成的板块从方格图的上方落下,玩家可以操作板块左右移动放到合适的位置,当板块中某一个方块的下边缘与方格图上的方块上边缘重合或者达到下边界时,板块不再移动,如果此时方格图的某一行全放满了方块,则该行被消除并得分。
在这个问题中,你需要写一个程序来模拟板块下落,你不需要处理玩家的操作,也不需要处理消行和得分。
具体的,给定一个初始的方格图,以及一个板块的形状和它下落的初始位置,你要给出最终的方格图。
输入格式
输入的前 行包含初始的方格图,每行包含 个数字,相邻的数字用空格分隔。 如果一个数字是 ,表示对应的方格中没有方块。 如果数字是 ,表示初始的时候有方块。 输入保证前 行中的数字都是 。
输入的第 至第 行包含新加入的板块的形状,每行包含 个数字,组成了板块图案。 表示没方块, 表示有方块。 输入保证板块的图案中正好包含 个方块,且 4 个方块是连在一起的(四连通,即标准俄罗斯方块)。
第 行包含一个 到 之间的整数,表示板块图案最左边开始的时候是在方格图的哪一列中。 注意,这里的板块图案指的是第 至 行所输入的板块图案,如果板块图案的最左边一列全是 ,则实际板块的左边位置需要右移至第一个非零列。
方格图共 列,从左到右依次为第 列。
输出格式
输出 行,每行 个数字,相邻的数字之间用一个空格分隔,表示板块下落后的方格图。 注意不需要处理最终的消行。
样例输入
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
说明
本样例中,给定的 板块图案的最左边位于方格图的第 列,实际板块的最左端其实位于方格图的第 列。