交互题 2000ms 256MiB

猜 01 序列

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

题目描述

这是一道交互题。

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

对于每一次询问,你可以选择若干个位置 i1,i2,,iki_1, i_2, \ldots, i_k ,设 I={i1,i2,,ik}I = \{i_1, i_{2}, \ldots, i_k\} ,评测机会返回 (jIaj)(jIaj)(\sum_{j \in I} a_j) \cdot (\sum_{j \notin I} a_j) 的结果。

输入格式

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

输出格式

对于询问,请按以下格式输出一行:

? k i_1 i_2 ... i_k 

其中 (1kn,1i1<i2<...<ikn)(1 ≤ k ≤ n, 1 ≤ i_1 < i_2 < ... < i_k ≤ 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

解释 # 1

样例隐藏的数列为 [1,1,1][1,1,1]

3

0

0


? 1 1

? 1 2

! 1

解释 # 2

样例隐藏的数列为 [0,1,0][0,1,0]

2026 年中国大学生程序设计竞赛全国邀请赛(南昌)

未参加
状态
已结束
规则
XCPC
题目
13
开始于
2026-5-24 9:30
结束于
2026-5-24 14:30
持续时间
5 小时
主持人
参赛人数
0