logo AlgoBeat OnlineJudge
登录 注册

#216889. [JLCPC 2026] 隐藏的 k 元组

内存限制:1024 MiB 时间限制:2000 ms 标准输入输出
题目类型:VJudge(洛谷) 评测方式:VJudge
上传者: 匿名

题目描述

这是一个交互题。

有一个隐藏的划分,将整数 分成 个互不相交的 元组。保证 的倍数。你需要通过询问找出所有隐藏的 元组。

一次询问中,你可以选择一个集合 ,交互库会返回一个整数,表示有多少个隐藏的 元组被完整包含 中。

你的询问次数不能超过 次。

是上取整符号, 表示不小于 的最小整数。例如

输入格式

程序开始时,交互库会输出一行两个整数 ,并且 的倍数)。

隐藏的划分由交互库保存,不会直接给出。

在你每次输出一次合法询问之后,交互库会返回一行一个整数 ,表示有多少个隐藏的 元组被完整包含在你询问的集合中。

输出格式

你可以进行如下形式的询问:

其中 ,且 必须是两两不同的整数,满足

该询问表示你选择集合 。交互库会返回一个整数 ,表示有多少个隐藏的 元组被完整包含在 中。

当你确定答案后,需要输出:

其中 表示元素 所在的元组编号。编号必须满足 。如果两个元素属于同一个隐藏元组,则它们的编号必须相同;如果两个元素属于不同隐藏元组,则它们的编号必须不同。元组编号的顺序可以任意。

你的询问次数不能超过 次。输出最终答案后,你的程序应立即结束。

注意,每次输出询问或最终答案后都必须刷新输出缓冲区。例如,在 C++ 中可以使用 fflush(stdout)cout << flush

如果你的输出格式非法、询问次数超过限制,或最终答案错误,将得到 Wrong Answer 或 Presentation Error。

交互库是非自适应的,即所有的 元组在交互前就已经确定好,不会随着询问的发生而改变。

样例

样例输入 1

6 2

1

1

3

样例输出 1

? 3 1 3 5

? 4 2 3 4 5

? 6 1 2 3 4 5 6

! 1 2 1 3 3 2

数据范围与提示

在下面的例子中,,隐藏的元组为

  • 询问 :元组 ,答案为
  • 询问 :元组 ,答案为
  • 询问 :三个元组都被包含,答案为
  • 输出 表示:元素 组成第 组;元素 组成第 组;元素 组成第 组。