P7944 「Wdcfr-1」Border of Gensokyo
题目描述
**这是一个交互式问题。**
Ran 正在帮助 Yukari 维护幻想乡的边界。
幻想乡的边界是一个 $n \times m$ 的矩阵,其中 $n$ 和 $m$ 都是偶数。不幸的是,由于 Moriya 神社的迁入,矩阵中现在有 4 个薄弱点。
为了简化维护工作,Ran 已经找到了从 $(1,1)$ 到 $(n,m)$ 的一条路径,只能向下或向右走。路径将四个薄弱点分隔开,使得每一侧恰好有两个薄弱点。她将在输入中告诉你这条路径。
现在你需要帮助 Ran 维护边界。你可以使用操作 `? x y` 来询问点 $(x,y)$ 是否是薄弱点。在查询之后,Ran 会将该点标记为蓝色。
如果在一次查询后,你刚刚找到了第 $k$ 个薄弱点,并且 $k$ 是偶数,你需要构造一条从第 $(k-1)$ 个薄弱点到第 $k$ 个薄弱点的简单路径。你构造的路径必须经过且仅经过所有标记为蓝色的点。Ran 然后将这些点在边界上加固并重新着色为红色。
Ran 不想做重复的工作,所以你只能用 `?` 查询白色的点。
现在 Ran 希望你能找到所有的“薄弱点”并完成所有的构造。
### 交互协议
首先从标准输入读取两个整数 $n$ 和 $m$。
然后从标准输入读取几个点(包括起点和终点),每行一个,表示从 $(1,1)$ 到 $(n,m)$ 的一条简单路径。
然后你可以进行**无限**次查询。将你的查询以 `? x y` 的格式打印到标准输出。然后你将从标准输入接收一个整数 $p$。如果 $p=1$,表示你询问的点确实是薄弱点;如果 $p=0$,表示它不是薄弱点。
记得刷新你的输出,你可以在 C++ 中使用 `fflush(stdout);`。请参考你的编程语言的文档。
在第 $k$ 次($k$ 是偶数)接收到结果 $p=1$ 时,请按顺序输出几个点(包括两个薄弱点),每行一个,以 $-1,-1$ 结束,以表示从第 $(k-1)$ 个到第 $k$ 个薄弱点的简单路径。
在找到第四个薄弱点并完成构造后,你需要立即退出程序。
输入格式
参考“交互方法”。
输出格式
参考“交互方法”。
说明/提示
### 解释
示例中的矩阵如下:
```plain
..XX
X...
....
X...
```
其中 `X` 表示一个“薄弱点”。
### 约束
$4 \le n,m \le 100$。
题面翻译由 ChatGPT-4o 提供。