#P15168. [SWERC 2022] Library game

[SWERC 2022] Library game

说明

Alessia 和 Bernardo 正在通过他们大学图书馆的书籍探索竞赛编程的世界。

图书馆由 mm 个区域组成,编号从 11mm。每个区域只包含某一特定主题的书籍,不同的区域对应不同的主题。为了防止学生在图书馆内随意游荡,学校建立了一套通行证制度。每张通行证有一个长度 yy,允许进入图书馆中连续的 yy 个区域。在一次访问中,学生必须从这些区域中选择恰好一本书并离开图书馆。每张通行证只能使用一次。

目前,Alessia 和 Bernardo 有 nn 张通行证,长度分别为 x1,x2,,xnx_1,\,x_2,\,\dots,\,x_n。他们对于如何提升有不同的看法:Alessia 认为学习更多不同的主题很重要,而 Bernardo 认为深入学习至少一个主题更为关键。因此,Alessia 想用这 nn 张通行证获得 nn 本不同主题的书,而 Bernardo 则希望至少获得两本同一主题的书。

他们达成了如下协议:在接下来的 nn 天中,每一天,Alessia 从剩余的通行证中选择一张长度为 yy 的通行证,并选择一个长度为 yy 的连续区域区间,然后 Bernardo 进入图书馆,从这些区域中选择恰好一本书。每张通行证只能使用一次。

Bernardo 能否至少获得两本同一主题的书,还是 Alessia 能成功避免这种情况?

你需要选择扮演 Alessia 或 Bernardo,并完成你所选角色的目标。评测器将扮演另一个角色。注意,即使在某一时刻 Bernardo 已经获得了两本同一主题的书,交互仍需持续到 nn 天结束。

输入格式

第一行包含两个整数 nnmm1n1001 \le n \le 100nm5000n \le m \le 5000)——通行证的数量和区域的数量。

第二行包含 nn 个整数 x1,x2,,xnx_1,\,x_2,\,\dots,\,x_n1xim1 \le x_i \le m)——可用通行证的长度。

交互格式

首先,你需要输出一行,内容为 Alessia\texttt{Alessia}Bernardo\texttt{Bernardo},表示你选择扮演的角色。

接下来,对于每一轮:

  • 如果你扮演 Alessia,每一轮输出一行两个整数 yyaa1amy+11 \le a \le m - y + 1),表示你选择一张长度为 yy 的通行证,以及区间 [a,a+y1][a, a + y - 1]。注意,必须还有至少一张长度为 yy 的通行证未被使用。之后,读入一个整数 bbaba+y1a \le b \le a + y - 1),表示 Bernardo 选择的主题编号。
  • 如果你扮演 Bernardo,每一轮读入两个整数 yyaa1amy+11 \le a \le m - y + 1),表示 Alessia 选择的通行证长度和区间起点。保证还有至少一张长度为 yy 的通行证未被使用。然后,输出一行一个整数 bbaba+y1a \le b \le a + y - 1),表示你选择的主题编号。

如果你的某次交互格式错误,交互器会立即终止,你的程序会收到 WRONG-ANSWER\texttt{WRONG-ANSWER} 判定。否则,你将根据上述游戏规则获得判定。

每次输出后请务必换行并刷新输出,否则会收到 TIMELIMIT\texttt{TIMELIMIT} 判定。刷新输出的方法如下:

  • C 语言使用 fflush(stdout)\texttt{fflush(stdout)}
  • C++ 使用 fflush(stdout)\texttt{fflush(stdout)}cout << flush\texttt{cout << flush}cout.flush()\texttt{cout.flush()}
  • Java 和 Kotlin 使用 System.out.flush()\texttt{System.out.flush()}
  • Python 使用 sys.stdout.flush()\texttt{sys.stdout.flush()}
5 14
3 7 2 3 10
-
4 10
4 1 6 4
-

提示

在第一个样例中,可以证明 Alessia 能完成她的目标。以下是一次交互示例(读入输入后):

$$\begin{array}{|c|c|c|} \hline \textbf{选手} & \textbf{评测器} & \textbf{说明} \\ \hline \texttt{Alessia} & & \text{程序将扮演 Alessia} \\ \hline 3 \quad 11 & & \text{选择 $y = 3$,$a = 11$} \\ \hline & 13 & \text{评测器选择 $b = 13$} \\ \hline 10 \quad 2 & & \text{选择 $y = 10$,$a = 2$} \\ \hline & 9 & \text{评测器选择 $b = 9$} \\ \hline 7 \quad 1 & & \text{选择 $y = 7$,$a = 1$} \\ \hline & 4 & \text{评测器选择 $b = 4$} \\ \hline 2 \quad 10 & & \text{选择 $y = 2$,$a = 10$} \\ \hline & 10 & \text{评测器选择 $b = 10$} \\ \hline 3 \quad 6 & & \text{选择 $y = 3$,$a = 6$} \\ \hline & 7 & \text{评测器选择 $b = 7$} \\ \hline \end{array}$$

选手的程序获胜,因为 Bernardo 选择的所有书籍主题都不同。上述交互中的操作可能不是最优的。

第二个样例中,可以证明 Bernardo 能完成他的目标。以下是一次交互示例(读入输入后):

$$\begin{array}{|c|c|c|} \hline \textbf{选手} & \textbf{评测器} & \textbf{说明} \\ \hline \texttt{Bernardo} & & \text{程序将扮演 Bernardo} \\ \hline & 4 \quad 1 & \text{评测器选择 $y = 4$,$a = 1$} \\ \hline 4 & & \text{选择 $b = 4$} \\ \hline & 1 \quad 10 & \text{评测器选择 $y = 1$,$a = 10$} \\ \hline 10 & & \text{选择 $b = 10$} \\ \hline & 6 \quad 3 & \text{评测器选择 $y = 6$,$a = 3$} \\ \hline 4 & & \text{选择 $b = 4$} \\ \hline & 4 \quad 5 & \text{评测器选择 $y = 4$,$a = 5$} \\ \hline 8 & & \text{选择 $b = 8$} \\ \hline \end{array}$$

选手的程序获胜,因为 Bernardo 选择了两本主题编号为 44 的书。上述交互中的操作可能不是最优的。

由 ChatGPT 4.1 翻译