我们爱跳键
题目描述:
在被三个小时的手速练习折磨后,绝望的小A恳求你编写一个程序,将给定的谱面转换为纯跳键谱面。
让我们用正式术语描述你的任务。注意本问题中的一些定义可能与实际4键节奏游戏中的定义有所不同。
一个谱面是一个\(n \times 4\)的二进制矩阵。设\(c_{i,j}\)表示第\(i\)行第\(j\)列的元素。其中,\(c_{i,j}=1\)表示该位置有一个音符,\(c_{i,j}=0\)表示该位置为空。给定的谱面保证没有一列会出现两个连续的音符,即对于所有\(1 < i \leq n\)和\(1 \leq j \leq 4\),都有\(c_{i-1,j} \times c_{i,j} = 0\)。
在演奏谱面时,你用左手击打第1和第2列的音符,用右手击打第3和第4列的音符。为了使谱面更易演奏,小A希望确保没有一只手需要连续击打两行的音符。为此,他需要你执行以下操作:
按逆序检查所有行:从第\(n-1\)行到第\(1\)行。
对于当前行\(i\):
- 如果第\(i+1\)行在第1或2列有音符,且第\(i\)行也在第1或2列有音符,则将第\(i\)行的该音符下移一行。(可以证明此时只有一个这样的音符且下方位置为空)
- 类似地,如果第\(i+1\)行在第\(3\)或\(4\)列有音符,且第\(i\)行也在第\(3\)或\(4\)列有音符,则将第\(i\)行的该音符下移一行
经过上述转换后,谱面将从恐怖的高密度手速谱变为友好的跳键谱。但小A不知道如何实现它。你能帮帮他吗?
阅读样例可能帮助你更好地理解这个任务。
输入格式:
第一行包含一个整数\(n\) \((1 \leq n \leq 10^3)\),表示谱面的行数。
接下来的\(n\)行,每行包含4个二进制数字,表示第\(i\)行4列中是否存在音符。
保证没有一列会出现两个连续的'1'。
输出格式:
输出\(n\)行。每行应包含4个二进制数字表示修改后的谱面。不要输出任何额外的空格或空行。
数据范围:
50%:\(n \leq 100\)
100%:无特殊限制
样例输入:
样例1: 4 1011 0100 1001 0010 样例2: 20 0011 0100 1001 0010 0100 1000 0110 0001 1010 0100 0011 1100 0011 0100 0011 1100 0011 0100 1010 0001
样例输出:
样例1: 1011 0000 1100 0011 样例2: 0011 0000 1100 0011 0100 0000 1110 0000 0011 1100 0011 1100 0011 0100 0011 1100 0011 0000 1100 0011时间限制: 1000ms
空间限制: 256MB
来源: 25年比赛初中组t1