B-4 复原棋谱
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
许多刚学习程序设计的同学都接触过“八皇后问题”,问题中的“皇后”其实就是国际象棋中的棋子之一,因为有着强大的移动能力,因此在国际象棋中是非常强力的棋子。
国际象棋采用代数记谱法记谱。在网上搜索国际象棋的棋谱时,你常常能看见形如1) ...Rdf8, 2) R1a3, 3) Qh4e1
这样的记录。这里鉴于原始记谱法为简化和压缩长度做了许多前提假设,实现起来相当复杂,我们给定一个代数记谱法的变种,请你根据这个变种的记谱法复原棋盘上的情况。
国际象棋分黑棋、白棋,两种颜色的棋子分别由两位玩家分别执棋,执白棋的玩家先下。双方轮流执子。每位玩家各有 16 枚棋子,分别为一王、一后、双象、双马、双车和八兵。开局时即全部放在棋盘上规定的棋格内。起始状态如下图:
以黑棋为例,图中第一行从左到右分别为:车、马、象、后、王、象、马、车。第二行全部为兵。白棋顺序与黑棋一致。
在我们规定的代数记谱法的变种中,规则如下:
1. 每一个棋子,除兵外都分配一个大写字母用作标识,如下:棋子 | 大写字母 |
---|---|
车 | R |
马 | N |
象 | B |
后 | Q |
王 | K |
兵 | 无 |
- 棋盘上的位置如上图所示,列从左到右编号为 a 到 h;行从下到上编号为 1 到 8。列在前,行在后,如 a8。
- 对于一步棋,由字母加初始方格位置加目标方格位置组成,如 c2c4(兵从 c2 格移动到 c4 格),或 Ng8f6。
- 当一个棋子被吃时,该步记录时需在目标格子之前添加一个“x”。如Bd6xe5(象由 d6 格移动到 e5 格,并吃掉了 e5 格上的棋子)。只能吃对手的棋子。
- 无需考虑棋子移动规则问题。
对于一个给定的棋谱,从起始状态出发,请你帮忙还原棋谱完成后的棋盘状况。如遇到不合法的记录,你需输出对应提示,并输出不合法记录前的棋盘状态,并忽略后续记录。
输入格式
输入第一行是一个正偶数 ( ),表示棋谱的总记录数。
接下来的 行,每行是一条记录,表示双方的一步棋。
输出格式
如果棋谱均合法,输出一行OK
,否则输出一行ERROR
。
接下来输出要求的棋盘状态,用.表示空格,@表示兵,例如初始棋盘形如下:
RNBQKBNR
@@@@@@@@
........
........
........
........
@@@@@@@@
RNBQKBNR
题目示例数据
8
Nb1c3
a7a6
a2a3
Rh8h6
Qd1b5
Ke8h4
h2xh4
Rh6h5
OK
RNBQ.BN.
.@@@@@@@
@.......
.Q.....R
.......@
@.N.....
.@@@@@@.
R.B.KBNR