CF1406E Deleting Numbers
题目描述
这是一个交互题。
有一个未知整数 $x$($1 \le x \le n$)。你需要找出 $x$ 的值。
一开始,你有一个整数集合 $\{1, 2, \ldots, n\}$。你最多可以进行 $10000$ 次如下操作:
- A $a$:查询当前集合中有多少个数是 $a$ 的倍数。
- B $a$:查询当前集合中有多少个数是 $a$ 的倍数,然后删除所有 $a$ 的倍数,但 $x$ 永远不会被删除(即使 $x$ 也是 $a$ 的倍数)。在此操作中,$a$ 必须大于 $1$。
- C $a$:表示你已经确定 $x=a$。此操作只能执行一次。
请注意,执行 B 操作时必须满足 $a>1$。
请编写程序找出 $x$ 的值。
输入格式
第一行包含一个整数 $n$($1 \le n \le 10^5$)。剩余部分将在交互过程中给出。
输出格式
每一轮,你的程序需要输出一行,包含一个大写字母 A、B 或 C 和一个整数 $a$(A、C 操作时 $1 \le a \le n$,B 操作时 $2 \le a \le n$)。这一行描述你要进行的操作。
如果你的操作类型为 C,程序应立即终止。
否则,你的程序应读取一行,包含一个整数,表示你操作的答案。
每次输出后,不要忘记刷新输出缓冲区。具体方法如下:
- C/C++ 使用 fflush(stdout);
- Java 使用 System.out.flush();
- Python 使用 sys.stdout.flush();
- Pascal 使用 flush(output);
- 其他语言请查阅相关文档。
保证 $x$ 在交互过程中是固定不变的。
Hack 格式:
要进行 Hack,请使用如下输入格式:
唯一一行包含两个整数 $n$ 和 $x$($1 \leq x \leq n \leq 10^5$)。
说明/提示
请注意,为了让样例更清晰,我们在样例中添加了额外的空行。你在交互过程中不应输出任何额外的空行。
在第一个测试中,$n=10$,$x=4$。
初始集合为:$\{1,2,3,4,5,6,7,8,9,10\}$。
第一次操作,你询问集合中有多少个数是 $4$ 的倍数并删除它们。答案是 $2$,因为有两个数是 $4$ 的倍数:$\{4,8\}$。$8$ 会被删除,但 $4$ 不会被删除,因为 $x$ 永远不会被删除。此时集合为 $\{1,2,3,4,5,6,7,9,10\}$。
第二次操作,你询问集合中有多少个数是 $2$ 的倍数。答案是 $4$,因为有四个数是 $2$ 的倍数:$\{2,4,6,10\}$。
第三次操作,你询问集合中有多少个数是 $8$ 的倍数。答案是 $0$,因为当前集合中没有任何数是 $8$ 的倍数。
第四次操作,你确定 $x=4$,这是正确答案。
由 ChatGPT 4.1 翻译