#P14134. 【MX-X22-T5】「TPOI-4E」Get MiN? Get MeX!

    ID: 15521 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>二分交互题Special JudgeO2优化梦熊比赛

【MX-X22-T5】「TPOI-4E」Get MiN? Get MeX!

题目描述

这是一道交互题。

有一个隐藏的 0n10\sim n-1 的排列 a1,,ana_1, \ldots, a_n这个排列是在你开始询问前就预先确定的,并且这个排列不会随着你的询问而改变,你可以对这个排列进行若干次询问:

  • 给定一个集合 SS,交互库给出 minxSax+mexxSax\min_{x\in S}a_x+\operatorname*{mex}_{x\in S}a_x 的值,此类询问至多使用 3535 次。

  • 给定一个集合 SS,交互库给出 minxSaxmexxSax\min_{x\in S}a_x-\operatorname*{mex}_{x\in S}a_x 的值,此类询问至多使用 11 次。

mexxSax\operatorname*{mex}_{x\in S}a_x 的含义为集合 {axxS}\{ a_x \mid x \in S \} 中最小未出现过的非负整数。

询问之后,你需要计算出排列中 00 的位置。

输入格式

见【输出格式】。

输出格式

你需要从标准输入读入一个正整数 nn,表示排列的长度。

对于第一种询问,你需要向标准输出输出一个字符 ?、一个整数 11,一个整数 lenlen 以及 lenlen 个互不相同的整数 SiS_i1Sin1\le S_i\le n),注意此类询问至多使用 3535 次。

对于第二种询问,你需要向标准输出输出一个字符 ?、一个整数 22,一个整数 lenlen 以及 lenlen 个互不相同的整数 SiS_i1Sin1\le S_i\le n),注意此类询问至多使用 11 次。

然后你需要清空缓冲区。你可以使用如下语句来清空缓冲区:

  • C++:fflush(stdout)
  • Java:System.out.flush()
  • Python:stdout.flush()
  • Pascal:flush(output)
  • 其他语言请参考相关文档。

接下来,你需要从标准输入中输入一个整数,代表评测机返回的结果。

询问结束后,你需要先向标准输出输出字符 !,然后输出一个整数 pp,表示排列中 00 的位置。输出后,你的程序应立即终止。

如果在某个时刻你的程序读取到 109-10^9 作为答案,它应立即退出(例如,通过调用 exit(0))。这种情况下,你将得到“Wrong Answer”,这意味着你提出的问题超过限制或提出了无效问题。如果你忽略这一点,可能会因为程序继续从已关闭的流中读取而得到其他判定结果。

6

4

2

1

-1

? 1 5 1 2 3 4 5

? 1 4 1 2 5 6

? 1 1 3

? 2 1 3

! 3

提示

【样例解释】

样例仅供展示交互格式,不保证样例输出策略的合理性。

隐藏的排列为 a=[5,2,0,1,3,4]a = [5,2,0,1,3,4]

【数据范围】

本题采用捆绑测试。

子任务编号 nn \le 特殊性质 分值 子任务依赖
11 11
22 ^ 22
33 3636 77 1,21,2
44 10510^5 A 1515
55 ^ B 2020
66 100100 1515 1,2,31,2,3
77 2×1032\times 10^3 ^ 1,2,3,61,2,3,6
88 10510^5 2525 1,2,3,4,5,6,71,2,3,4,5,6,7
  • 特殊性质 A:保证排列中前 n2\lceil \frac{n}{2}\rceil 个数为偶数,后 n2\lfloor \frac{n}{2}\rfloor 个数为奇数。
  • 特殊性质 B:保证排列纯随机生成。

对于所有数据,保证 1n1051 \le n \le 10^5