QOJ.ac

QOJ

実行時間制限: 1 s メモリ制限: 1024 MB 満点: 100 インタラクティブ

#4670. 如何识别自我

統計

这是一个交互式问题。

……在今晚的噩梦中,你与一位巫师交谈……开了一个糟糕的玩笑,你发现自己变成了一枚白棋棋子,置身于棋盘之上。你可以看到自己位于 e2,但你不知道自己是谁——是兵(Pawn)、车(Rook)、马(Knight)、象(Bishop)、后(Queen)还是王(King)。你无法询问其他棋子,因为棋盘上只有你一个。

你决定选择一个格子并尝试移动到该格子。如果该移动对于你的棋子是合法的,你就会移动到该格子;否则,你将留在原地。你计划进行不超过 4 次尝试来确定你的棋子身份,然后回到 e2 格子——否则愤怒的巫师可能会把你变成比棋子更糟糕的东西……

注意,白棋棋子的移动方式如下:

  • 兵(Pawn)——向前移动一格(即保持列不变,行号加 1)。
  • 车(Rook)——在同一行或同一列移动任意数量的格子。
  • 象(Bishop)——沿四个对角线方向移动任意数量的格子。
  • 马(Knight)——沿一个方向移动两格,再沿两个正交方向之一移动一格,呈 L 型移动。
  • 后(Queen)——在同一行、列或对角线方向移动任意数量的格子。
  • 王(King)——移动到与当前格子有公共点的 8 个格子中的任意一个。

此处不适用更复杂的国际象棋规则(如兵的首次双步移动或到达底线后的升变)。

格子由 2 个字符的字符串表示:第一个字符是 ‘a’ 到 ‘h’ 之间的字母,表示列;第二个字符是 ‘1’ 到 ‘8’ 之间的数字,表示行。

交互

交互由你的程序开始,通过打印格式为 ? target 的尝试,其中 target 是棋盘坐标表示的格子。如果成功,你将收到整数 1(此时你位于 target 格子),如果失败,你将收到 0 且位置保持不变。

如果你想输出答案,请打印 ! c,其中 c 是表示棋子的小写英文字母:‘p’ 代表兵,‘r’ 代表车,‘b’ 代表象,‘n’ 代表马,‘q’ 代表后,‘k’ 代表王。你只能执行此操作一次;请确保在打印答案时你位于 e2 格子。此操作不计入查询次数。如果你打印了答案但不在 e2 格子,则判定为错误。

样例

样例输入 1

0
1
0
1
1

样例输出 1

? g3
? e3
? d2
? e5
? e2
! r

说明

样例中的交互仅用于阐明输出格式:对于正确的解法,5 次尝试次数过多。

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.