QOJ.ac

QOJ

时间限制: 1 s 内存限制: 2048 MB 总分: 100

#2339. 事后检查

统计

您的大学棋盘游戏俱乐部刚刚举办了一场跳棋锦标赛,您被指派负责记录比赛过程。不幸的是,在回家的路上,您把所有的纸都掉进了水坑里!真是灾难!您写的大部分内容现在都无法辨认;您剩下的只有几份在各种比赛中途进行的走法列表。有什么办法可以重现这些比赛中发生的事情吗?您最好快点解决这个问题,否则他们会把您降职为井字棋记录员!

跳棋(或称英国跳棋)是一种规则简单的知名棋盘游戏。它在 $8 \times 8$ 跳棋盘的深色格子上进行。游戏有两名玩家,黑方和白方,他们轮流移动自己的棋子(黑方的所有棋子都是黑色的,白方的所有棋子都是白色的)。每个棋子占据一个深色格子,可以是普通的“兵”(man)或升级后的“王”(king)。一个回合包括选择一个棋子并以以下两种方式之一进行移动:

  1. 将棋子对角移动到相邻的空闲深色格子上,如图 C.1(a) 所示。这被称为简单移动(simple move)。如果棋子是兵,它只能向棋盘对方一侧的两个对角方向移动(黑方朝向底部,白方朝向顶部)。如果棋子是王,它可以在所有四个对角方向上移动。

  2. 跳过相邻的敌方棋子,落在紧邻其后的空闲格子上,然后移除(捕获)该敌方棋子。兵只能向上述两个方向跳跃,而王可以在所有四个方向上跳跃。玩家随后可以重复此步骤,只要有位置合适的敌方棋子可供捕获,就可以继续用同一枚棋子进行跳跃。这种包含一次或多次跳跃的序列称为跳跃移动(jump move)。图 C.1(b) 展示了一个包含三次跳跃的跳跃移动。

图 C.1: (a), (b) 样例输入 1 中的前两步走法。较大的棋子是王,较小的棋子是兵。黑方位于顶部,白方位于底部。(c) 输入中使用的编号。

在跳棋中,捕获是强制性的。如果玩家回合开始时有跳跃移动可用,他们必须进行跳跃,并且在用该棋子进行跳跃时,只要还有可能的跳跃,就不能停止。如果存在多种可能性,他们可以自由选择用哪枚棋子跳跃以及跳向何处。在图 C.1(b) 中,黑方无法进行任何其他移动。

如果一枚兵到达了离其玩家最远的一行(即黑兵到达底行或白兵到达顶行),它将从棋盘上移除并替换为同色的王(这被称为升级),回合结束。棋子不能在同一回合内先升级,然后作为新王向后跳跃。

给定一个走法列表,找到一种棋子布局,使得这些走法可以从该布局开始按顺序合法地进行。此布局中可能没有位于底行的黑兵或位于顶行的白兵,因为它们本应已经被升级为王。您只需要确保遵守上述规则;您不需要确保此布局在真实的跳棋游戏中是可达的。

输入格式

输入的第一行包含一个字符 $c$ 和一个整数 $n$,其中 $c \in \{B, W\}$ 表示哪位玩家先走(分别为黑方或白方),$n$ ($1 \le n \le 100$) 是列表中的走法数量。接下来是 $n$ 行,每行描述了下文中定义的标准跳棋记谱法中的一个走法。

深色格子由数字 1–32 标识,如图 C.1(c) 所示。从格子 $a$ 到格子 $b$ 的简单移动记为 $a-b$。从 $a$ 开始并跳跃至 $b_1, b_2, \dots, b_k$ 的跳跃移动记为 $axb_1xb_2x\dots xbk$。

给定的走法集合总存在一个有效的解。

输出格式

并排输出两个棋盘(中间用空格隔开),给出给定走法之前(左侧)和之后(右侧)棋盘上所有棋子的位置。使用 ‘-’ 表示浅色格子,‘.’ 表示空的深色格子,小写字母 ‘b’ 和 ‘w’ 表示黑兵和白兵,大写字母 ‘B’ 和 ‘W’ 表示黑王和白王。如果存在多个有效解,任何一个均可。

样例

样例输入 1

W 3
21-17
13x22x31x24
19x28

样例输出 1

-b-.-.-. -b-.-.-.
.-.-.-.- .-.-.-.-
-.-.-.-. -.-.-.-.
B-.-w-.- .-.-w-.-
-.-.-W-. -.-.-.-.
w-.-.-.- .-.-.-.-
-.-w-w-. -.-.-.-W
.-.-.-.- .-.-.-.-

样例输入 2

B 5
2-7
9x2
32-27
2x11x18
5-9

样例输出 2

-.-b-.-W -.-.-.-W
b-b-.-.- .-.-.-.-
-w-.-.-. -b-.-.-.
B-w-b-.- B-w-.-.-
-.-.-.-. -.-W-.-.
.-.-.-.- .-.-.-.-
-.-.-.-. -.-.-B-.
.-.-.-B- .-.-.-.-

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.