CF1028G Guess the number
题目描述
本题为交互题。
你需要猜出一个隐藏的数字 $x$,其范围为 $1$ 到 $M = 10004205361450474$ 之间(包含两端)。
你最多可以进行 $5$ 次询问。
每次询问时,你可以输出一个长度为 $k$ 的递增序列($k \leq x$),序列中的每个整数都在 $1$ 到 $M$ 之间(包含两端)。你将会获得以下几种反馈之一:
- 如果隐藏数字就在你询问的序列中,你立即获胜;
- 否则,你会被告知隐藏数字相对于你询问序列的位置,即:隐藏数字小于序列中所有数字、大于序列中所有数字,或者会给出一个 $i$,表示隐藏数字 $x$ 位于第 $i$ 个和第 $i+1$ 个数字之间。
具体交互方式见下文说明。
请注意,交互器是自适应的,即隐藏数字可以根据你提出的询问动态变化。但保证对于任何解法,交互器的行为都与隐藏数字预先固定的情况无法区分。
仅允许对隐藏数字固定的情况进行 Hack。Hack 时输入一个 $1$ 到 $M$ 之间的整数即可。在所有预测试中,隐藏数字也是固定的。
输入格式
无输入。
输出格式
你最多可以进行 $5$ 次询问。每次询问时,输出一个整数 $k$($1 \leq k \leq 10^4$),然后输出一个递增的长度为 $k$ 的序列 $t_0 < t_1 < \ldots < t_{k-1}$,每个数字都在 $1$ 到 $M$ 之间。若 $k > x$,你会失败。
你会收到一个整数作为反馈:
- 如果是 $-2$,表示你的询问无效或你已经失败。收到 $-2$ 后应立即退出,否则会收到 Wrong answer 判定。否则你可能会因为继续读取已关闭的流而得到任意判定。
- 如果是 $-1$,表示你猜中了数字,也应立即退出。
- 否则你会收到一个 $0$ 到 $k$ 之间的整数 $i$,表示隐藏数字相对于你输出的序列的位置。如果 $i = 0$,则 $x < t_0$;如果 $i = k$,则 $t_{k-1} < x$;否则 $t_{i-1} < x < t_i$。
每次输出询问后不要忘记换行并刷新输出缓冲区。否则会因超时被判定为 Idleness limit exceeded。具体刷新方式如下:
- C++:fflush(stdout) 或 cout.flush()
- Java:System.out.flush()
- Pascal:flush(output)
- Python:stdout.flush()
- 其它语言请查阅相关文档。
说明/提示
在第一个示例中,隐藏数字为 $5$。
由 ChatGPT 4.1 翻译