QOJ.ac

QOJ

時間限制: 5.0 s 記憶體限制: 256 MB 總分: 100 可 Hack ✓

#12921. 可怜的国王

统计

棋盘上有两枚白子和一枚黑王。每枚白子可能是车(rook)、象(bishop)或后(queen)。当前轮到白方走棋。你代表白方,需要尽快将黑王将死。请编写一个程序,计算在黑方采取最优策略以延长游戏的情况下,白方将死黑王所需的最少步数。

以下是关于国际象棋规则的一些信息:

  1. 上述局面在国际象棋中是不合法的,因为棋盘上没有白王。除此之外,游戏遵循国际象棋规则。
  2. 棋盘大小为 $8 \times 8$ 格。棋盘的列用字母 'a' 到 'h' 表示,行用数字 '1' 到 '8' 表示。
  3. 对局双方(白方和黑方)轮流移动一枚己方棋子。在本题中,我们仅计算白方的移动步数。
  4. 车可以水平或垂直移动任意数量的空格。它不能跳过其他棋子,也不能停在与己方棋子相同的格子上。
  5. 象可以沿对角线移动任意数量的空格。它不能跳过其他棋子,也不能停在与己方棋子相同的格子上。
  6. 后可以水平、垂直或沿对角线移动任意数量的空格。它不能跳过其他棋子,也不能停在与己方棋子相同的格子上。
  7. 将军(check)是指在下一回合威胁要吃掉对方的王。
  8. 王可以在任何方向(水平、垂直或对角线)移动一格,除非该移动会使王处于被将军的状态。如果满足此条件,王可以移动到已被白子占据的格子上。在这种情况下,该白子被吃掉并从棋盘上移除。
  9. 将死(checkmate)是指王受到攻击(即处于被将军状态)且没有任何合法的移动可以摆脱威胁的局面。
  10. 逼和(stalemate)是指轮到移动的一方未被将军,但没有任何合法移动的局面。根据国际象棋规则,当出现逼和时,游戏以平局结束(这对白方而言是不可接受的)。

输入格式

输入的第一行包含位置的数量(最多为 $1.5 \cdot 10^5$),接下来的每一行包含一个位置的描述。一个位置由棋盘上三枚棋子的位置表示:首先是黑王,然后是两枚白子。每枚白子的位置前都有一个类型标识字符:'R' 表示车,'B' 表示象,'Q' 表示后。保证没有两枚棋子占据同一个格子,且初始位置不存在将军状态。除此之外,给定的位置可以是任意的:例如,两枚白子都可以是后。

输出格式

为输入中的每个位置输出一行。该行应包含白方从相应位置开始,保证将死黑王所需的最少步数。如果无法达到目标,则输出 0。

样例

输入 1

2
c7 R f1 R g6
f5 B b3 R h3

输出 1

2
0

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.