交互题 1000ms 256MiB

猜01序列

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

猜01序列

这是一道交互题。

给定正整数 nn,评测机会生成一个未知的长度为 nn 的 01 序列 a1,a2,,ana_1,a_2,\dots,a_n,你最多可以问评测机 17 个问题,来求解这个 01 序列中 1 的个数,即 i=1nai\sum_{i=1}^n a_i。数据保证至少有一个 1。

对于每一次询问,你可以选择若干个位置 i1,i2,,iki_1,i_2,\dots,i_k,设 I={i1,i2,,ik}I = \{i_1,i_2,\dots,i_k\},评测机会返回:

$$\left(\sum_{j \in I} a_j\right) \cdot \left(\sum_{j \notin I} a_j\right)$$

的结果。


输入

第一行一个正整数 n (1n105)n\ (1 \le n \le 10^5),表示这个 01 序列的长度。


交互协议

  • 对于询问,请按以下格式输出一行(不包括引号):
    "? k i_1 i_2 ... i_k"
    其中 $1 \le k \le n,\ 1 \le i_1 < i_2 < \dots < i_k \le n$。
  • 对于输出答案,请按以下格式输出一行(不包括引号):
    "! s",其中 s=i=1nais = \sum_{i=1}^n a_i

输出答案本身不计入查询次数。

交互器是非自适应的,也就是说,答案在参与者提出任何查询之前就已经确定了,并且不会依赖于参与者所提出的查询。

在输出每个查询之后,不要忘记输出换行并刷新输出缓冲区。

你可以使用如下语句来清空缓冲区:

  • 对于 C/C++:fflush(stdout)
  • 对于 C++:std::cout << std::flush
  • 对于 Java:System.out.flush()
  • 对于 Python:sys.stdout.flush()

样例

3

2

? 2 1 3

! 3
3

0

0

? 1 1

? 1 2

! 1

注释

第一个样例隐藏的数列为 [1,1,1][1,1,1],第二个样例隐藏的数列为 [0,1,0][0,1,0]

2026 SYNU 五月周赛 Round IV (CCPC2026东北赛重现赛)

未参加
状态
已结束
规则
XCPC
题目
7
开始于
2026-5-28 17:30
结束于
2026-5-28 22:30
持续时间
5 小时
主持人
参赛人数
8