#P16914. [JLCPC 2026] 隐藏的 k 元组
[JLCPC 2026] 隐藏的 k 元组
题目描述
这是一个交互题。
有一个隐藏的划分,将整数 分成 个互不相交的 元组。保证 是 的倍数。你需要通过询问找出所有隐藏的 元组。
一次询问中,你可以选择一个集合 ,交互库会返回一个整数,表示有多少个隐藏的 元组被完整包含在 中。
你的询问次数不能超过 次。
是上取整符号, 表示不小于 的最小整数。例如 ,。
输入格式
程序开始时,交互库会输出一行两个整数 和 (,,并且 是 的倍数)。
隐藏的划分由交互库保存,不会直接给出。
在你每次输出一次合法询问之后,交互库会返回一行一个整数 ,表示有多少个隐藏的 元组被完整包含在你询问的集合中。
输出格式
你可以进行如下形式的询问:
其中 ,且 必须是两两不同的整数,满足 。
该询问表示你选择集合 。交互库会返回一个整数 ,表示有多少个隐藏的 元组被完整包含在 中。
当你确定答案后,需要输出:
其中 表示元素 所在的元组编号。编号必须满足 。如果两个元素属于同一个隐藏元组,则它们的编号必须相同;如果两个元素属于不同隐藏元组,则它们的编号必须不同。元组编号的顺序可以任意。
你的询问次数不能超过 次。输出最终答案后,你的程序应立即结束。
注意,每次输出询问或最终答案后都必须刷新输出缓冲区。例如,在 C++ 中可以使用 fflush(stdout) 或 cout << flush。
如果你的输出格式非法、询问次数超过限制,或最终答案错误,将得到 Wrong Answer 或 Presentation Error。
交互库是非自适应的,即所有的 元组在交互前就已经确定好,不会随着询问的发生而改变。
6 2
1
1
3
? 3 1 3 5
? 4 2 3 4 5
? 6 1 2 3 4 5 6
! 1 2 1 3 3 2
提示
在下面的例子中,,,隐藏的元组为 、、。
$$\def\arraystretch{1.5} \begin{array}{|l|c|} \hline \textbf{程序} & \textbf{交互库} \\ \hline & \verb!6 2! \\ \hline \verb!? 3 1 3 5! & \verb!1! \\ \hline \verb!? 4 2 3 4 5! & \verb!1! \\ \hline \verb!? 6 1 2 3 4 5 6! & \verb!3! \\ \hline \verb|! 1 2 1 3 3 2| & \\ \hline \end{array}$$- 询问 :元组 ,答案为 。
- 询问 :元组 ,答案为 。
- 询问 :三个元组都被包含,答案为 。
- 输出 表示:元素 组成第 组;元素 组成第 组;元素 组成第 组。