CF1552H Guess the Perimeter
题目描述
我们称平面上的一个点为“可选点”,如果它的坐标是正整数且不超过 $200$。
存在一个不可见的矩形,满足以下条件:
- 它的顶点都是可选点;
- 它的边平行于坐标轴;
- 它的面积大于零。
你的任务是猜出这个矩形的周长。为此,你最多可以询问 $4$ 次。
每次询问,你可以选择一个非空的可选点集合,系统会告诉你你选中的点中有多少个在不可见矩形的内部或边界上。
输入格式
无
输出格式
要发起一次询问,请输出两行:
- 第一行输出 "? $k$",其中 $k$($k \ge 1$)为你选择的点的数量。
- 第二行输出 $2k$ 个整数 $x_1,\, y_1,\, x_2,\, y_2,\, \dots,\, x_k,\, y_k$($1 \le x_i, y_i \le 200$,$i=1,2,\dots,k$),表示你选择的 $k$ 个不同的可选点(点的顺序无关紧要)。
之后,你需要读取一个整数——表示你选择的点中有多少个在不可见矩形的内部或边界上。
当你确定了不可见矩形的周长 $p$ 后,输出 "! $p$" 并结束程序。
如果你询问超过 $4$ 次,或者某次询问格式不正确,交互器会立即终止,你的程序会收到 Wrong Answer 判定。
交互器可能是自适应的(即隐藏的矩形可能不是在交互开始前就选定的)。
每次输出询问后不要忘记输出换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 判定。具体做法如下:
- C++:fflush(stdout) 或 cout.flush()
- Java:System.out.flush()
- Pascal:flush(output)
- Python:stdout.flush()
- 其它语言请查阅相关文档。
Hacks
要对本题进行 Hack,请使用如下格式。
输入仅一行,包含 $4$ 个整数 $x_0$、$y_0$、$x_1$、$y_1$($1 \le x_0 < x_1 \le 200$,$1 \le y_0 < y_1 \le 200$),其中 $(x_0, y_0)$ 是隐藏矩形的左下角顶点,$(x_1, y_1)$ 是右上角顶点。
注意,对于 Hack,交互器不会是自适应的。
说明/提示
以下是第一个样例的交互示例,展示了询问的格式。
$$
\begin{array}{l|l|l}
\text{询问(选手程序)} & \text{回答(交互器)} & \text{说明} \\
\hline
\mathtt{?\ 4} & & \text{我们选择了矩形的 $4$ 个顶点} \\
\mathtt{13\ 5\ 13\ 80\ 123\ 5\ 123\ 80} & \mathtt{4} & \\
\hline
\mathtt{?\ 5} & & \text{我们选择了矩形外的 $4$ 个点} \\
\mathtt{100\ 4\ 100\ 81\ 12\ 40\ 124\ 40\ 50\ 50} & \mathtt{1} & \text{以及点 $(50,50)$。} \\
\hline
\mathtt{?\ 2} & & \text{我们选择了点 $(1, 1)$} \\
\mathtt{200\ 200\ 1\ 1} & \mathtt{0} & \text{和 $(200,200)$。} \\
\hline
\mathtt{!\ 370} & & \text{这是正确的周长。}
\end{array}
$$
对于第二个样例,一种可能的交互如下:
$$
\begin{array}{l|l|l}
\text{询问(选手程序)} & \text{回答(交互器)} & \text{说明} \\
\hline
\mathtt{?\ 4} & & \text{我们选择了点 $(3, 2)$、$(4, 1)$、} \\
\mathtt{3\ 2\ 4\ 1\ 5\ 2\ 4\ 3} & 2 & \text{$(5, 2)$ 和 $(4, 3)$。} \\
\hline
\mathtt{?\ 7} & & \text{我们选择了点 $(1, 4)$、$(2, 4)$、} \\
\mathtt{1\ 4\ 2\ 4\ 1\ 5\ 2\ 5\ 5\ 5\ 5\ 6\ 6\ 5} & 1 & \text{$(1, 5)$、$(2, 5)$、$(5, 5)$、$(5, 6)$ 和 $(6, 5)$。} \\
\hline
\mathtt{!\ 8} & & \text{这是正确的周长。}
\end{array}
$$
情况如下图所示:
绿色点为第一次询问的点,橙色点为第二次询问的点。可以看到,只有两个矩形与交互器的回答一致:
- 顶点为 $(2, 2)$ 和 $(4, 4)$ 的矩形(红色);
- 顶点为 $(4, 2)$ 和 $(5, 5)$ 的矩形(蓝色)。
由于这两个矩形的周长都是 $8$,因此最终答案为 $8$。
由 ChatGPT 4.1 翻译