P12622 [ICPC 2025 NAC] Entrapment
题目描述
_Entrapment_ 是一款非对称的双人游戏,在一个 $3 \times 3$ 的方格棋盘上进行。两名玩家分别称为 Runner(逃亡者)和 Trapper(追捕者)。棋盘方格编号如下:
$$\begin{array}{|c|c|c|}
\hline
1 & 2 & 3 \\
\hline
4 & 5 & 6 \\
\hline
7 & 8 & 9 \\
\hline
\end{array}$$
游戏开始前,玩家需约定游戏轮数 $R$ 和初始棋盘状态。最多有 $8$ 个方格可被标记为 _不可用_。玩家还需确定谁扮演 Runner,谁扮演 Trapper。Runner 会秘密选择一个可用的起始方格(未被标记为不可用的方格),但不会告知 Trapper。
每轮游戏按以下顺序进行:
1. Trapper 公开选择一个可用方格的子集(允许空集),并询问 Runner:"你当前是否在这些方格中?"
2. Runner 必须如实回答"是"或"否"。
3. Trapper 公开选择一个可用方格,该方格在后续游戏中变为不可用。(Runner 可能正位于该方格,此时无特殊效果)
4. Runner 秘密移动到当前方格的相邻可用方格(上下左右相邻)。若无可用相邻方格,Runner 宣布被捕获,Trapper 获胜。
若游戏结束时 Runner 未被捕获,需向 Trapper 证明自己始终诚实:公开起始方格和每轮移动路径。此时 Runner 获胜。
由于 Runner 的初始选择和移动路径都是秘密的,Runner 可以通过"作弊"(不真正固定位置)来规避追捕。只要最终能提供符合所有回答的合法移动路径,Runner 即可获胜。
输入格式
### 交互说明
本题为交互题。给定游戏轮数 $R$ 和初始不可用方格集合,判断在最优策略下 Runner 或 Trapper 谁能获胜,并作为该角色与评测机对战。评测机会遵守游戏规则,但不保证采用最优策略。
交互开始时,首先读取一行两个整数 $R$ 和 $U$($1 \leq R \leq 9$,$0 \leq U \leq 8$,$R + U \leq 9$),分别表示游戏轮数和初始不可用方格数量。
若 $U > 0$,接着读取一行 $U$ 个空格分隔的整数 $s$($1 \leq s \leq 9$),表示初始不可用方格的编号(参见上方编号图示)。保证这些编号互不相同。
判断最优策略下的获胜方,输出一行字符串 $\texttt{Runner}$(Runner 必胜)或 $\texttt{Trapper}$(否则)。之后将作为该角色继续交互:
**作为 Runner** 时,重复以下步骤 $R$ 次:
1. 读取一个整数 $N$ 表示 Trapper 询问的方格数量($0 \leq N \leq \text{可用方格数}$)
2. 若 $N > 0$,读取一行 $N$ 个空格分隔的整数 $\ell$,表示被询问的方格编号(保证编号合法且可用)
3. 输出 $\texttt{Yes}$ 或 $\texttt{No}$ 回答是否位于被询问方格中
4. 读取一个整数 $i$ 表示 Trapper 标记为不可用的方格(保证该方格当前可用)
5. 若有可用相邻方格,输出 $\texttt{Free}$;否则输出 $\texttt{Trapped}$ 并退出(此时判负)
完成 $R$ 轮后,输出一行 $R+1$ 个空格分隔的整数:起始方格编号和每轮移动的目标方格编号。移动路径必须合法且与之前回答一致,然后退出程序。
**作为 Trapper** 时,重复以下步骤 $R$ 次:
1. 输出一个整数 $N$ 表示询问的方格数量
2. 若 $N > 0$,输出一行 $N$ 个空格分隔的可用方格编号
3. 读取 $\texttt{Yes}$ 或 $\texttt{No}$ 作为回答
4. 输出一个整数 $i$ 表示要标记为不可用的方格(必须当前可用)
5. 读取 $\texttt{Free}$ 或 $\texttt{Trapped}$:若为后者则获胜并退出;若完成 $R$ 轮后 Runner 仍自由则判负
评测机保证所有回答真实有效。
**注意**:每次输出后需刷新输出流,交互结束后需立即退出。若评测机收到非法输入会输出 $-1$ 并退出,此时程序必须检测该错误并退出以避免错误判定。
输出格式
参见交互说明。