CF1776C Library game
题目描述
Alessia 和 Bernardo 正在通过他们大学图书馆的书籍探索竞赛编程的世界。
图书馆由 $m$ 个区域组成,编号从 $1$ 到 $m$。每个区域只包含某一特定主题的书籍,不同的区域对应不同的主题。为了防止学生在图书馆内随意游荡,学校建立了一套通行证制度。每张通行证有一个长度 $y$,允许进入图书馆中连续的 $y$ 个区域。在一次访问中,学生必须从这些区域中选择恰好一本书并离开图书馆。每张通行证只能使用一次。
目前,Alessia 和 Bernardo 有 $n$ 张通行证,长度分别为 $x_1,\,x_2,\,\dots,\,x_n$。他们对于如何提升有不同的看法:Alessia 认为学习更多不同的主题很重要,而 Bernardo 认为深入学习至少一个主题更为关键。因此,Alessia 想用这 $n$ 张通行证获得 $n$ 本不同主题的书,而 Bernardo 则希望至少获得两本同一主题的书。
他们达成了如下协议:在接下来的 $n$ 天中,每一天,Alessia 从剩余的通行证中选择一张长度为 $y$ 的通行证,并选择一个长度为 $y$ 的连续区域区间,然后 Bernardo 进入图书馆,从这些区域中选择恰好一本书。每张通行证只能使用一次。
Bernardo 能否至少获得两本同一主题的书,还是 Alessia 能成功避免这种情况?
你需要选择扮演 Alessia 或 Bernardo,并完成你所选角色的目标。评测器将扮演另一个角色。注意,即使在某一时刻 Bernardo 已经获得了两本同一主题的书,交互仍需持续到 $n$ 天结束。
输入格式
第一行包含两个整数 $n$ 和 $m$($1 \le n \le 100$,$n \le m \le 5000$)——通行证的数量和区域的数量。
第二行包含 $n$ 个整数 $x_1,\,x_2,\,\dots,\,x_n$($1 \le x_i \le m$)——可用通行证的长度。
输出格式
首先,你需要输出一行,内容为 $\texttt{Alessia}$ 或 $\texttt{Bernardo}$,表示你选择扮演的角色。
接下来,对于每一轮:
- 如果你扮演 Alessia,每一轮输出一行两个整数 $y$ 和 $a$($1 \le a \le m - y + 1$),表示你选择一张长度为 $y$ 的通行证,以及区间 $[a, a + y - 1]$。注意,必须还有至少一张长度为 $y$ 的通行证未被使用。之后,读入一个整数 $b$($a \le b \le a + y - 1$),表示 Bernardo 选择的主题编号。
- 如果你扮演 Bernardo,每一轮读入两个整数 $y$ 和 $a$($1 \le a \le m - y + 1$),表示 Alessia 选择的通行证长度和区间起点。保证还有至少一张长度为 $y$ 的通行证未被使用。然后,输出一行一个整数 $b$($a \le b \le a + y - 1$),表示你选择的主题编号。
如果你的某次交互格式错误,交互器会立即终止,你的程序会收到 $\texttt{WRONG-ANSWER}$ 判定。否则,你将根据上述游戏规则获得判定。
每次输出后请务必换行并刷新输出,否则会收到 $\texttt{TIMELIMIT}$ 判定。刷新输出的方法如下:
- C 语言使用 $\texttt{fflush(stdout)}$;
- C++ 使用 $\texttt{fflush(stdout)}$、$\texttt{cout
说明/提示
在第一个样例中,可以证明 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 选择了两本主题编号为 $4$ 的书。上述交互中的操作可能不是最优的。
由 ChatGPT 4.1 翻译