CF1100D Dasha and Chess
题目描述
这是一道交互题。
Dasha 和 NN 喜欢下象棋。在对弈时他们觉得普通象棋不够有趣,于是发明了下面这个游戏。
在一个 $999 \times 999$ 的棋盘上,有 $666$ 个黑车和 $1$ 个白王。当白王移动到与任意黑车同行或同列的位置时(即被将军),白王获胜。
双方轮流行动,白方先行。NN 操控白王,每次可以将王移动到相邻的格子(包括对角线),即如果王在 $(x,y)$,可以移动到 $(nx,ny)$,只要满足 $\max(|nx-x|,|ny-y|)=1$ 且 $1 \leq nx,ny \leq 999$。王不能移动到已有黑车的格子,但可以与黑车同行或同列。
Dasha 不按常规象棋规则移动车,而是每次选择任意一个黑车移动到棋盘上未被占据的任意位置(可以保持原位)。但她不能将车移动到与王同行或同列的位置。
双方各进行 $2000$ 回合后,若白王未被将军,则黑方获胜。
NN 不想输,但觉得这个任务太难,于是请你编写一个程序来操控白王,确保总能获胜。注意 Dasha 能看到你的王的位置并据此调整策略。
输入格式
程序开始时将收到 $667$ 行输入。每行两个整数 $x$ 和 $y$($1 \leq x,y \leq 999$)表示棋子坐标。第一行是王的位置,后面 $666$ 行是黑车的位置。保证初始时王未被将军且所有棋子位置不同。
输出格式
当王被将军时,程序应立即终止。
交互过程:
每次移动王时,输出两个整数 $x$ 和 $y$ 表示目标位置。王不能移动到已有黑车的格子。保证总有合法移动。
每次移动后,读取三个整数 $k,x,y$ 表示移动的黑车编号和目标位置。若收到 "-1 -1 -1" 表示王被将军,程序应立即终止。
每次输出后要刷新缓冲区,否则会导致超时。可以使用:
- C++: `fflush(stdout)` 或 `cout.flush()`
- Java: `System.out.flush()`
- Python: `stdout.flush()`
若收到 "0 0 0" 表示查询无效,应立即退出以避免错误。
本题不允许使用 hack。
说明/提示
样例经过精简。第一个测试用例中所有黑车的初始位置详见 。不保证黑车会如样例中那样移动。