保持通话,无人爆炸
- 时间限制:1 秒
- 内存限制:256 MB
- 输入:标准输入
- 输出:标准输出
本题的名称引用自一款知名游戏(以防有人不知道)。
这是一道交互题。
罗伯特·奥本海默正在准备“三位一体”核试验。为此,他需要极其精确地调整原子弹的功率,以避免发生意外反应。试验成功的最大功率为 $p$ —— 任何更大的值都极有可能引发灾难性后果。
然而罗伯特并不知道 $p$ 的值,只知道 $2 \le p < 10^{12}$。为了找到 $p$,罗伯特可以进行一系列测试,也可以向著名科学家(如阿尔伯特·爱因斯坦)寻求建议。
- 为了寻求建议,罗伯特可以给出一个不超过 $10^6$ 的整数 $t$,并得到回答:$t$ 是否在区间 $(\sqrt{p}, p]$ 内。
- 如果罗伯特进行一次实验,他同样选择一个不超过 $10^{12}$ 的整数 $t$,并且:
- 如果 $t > p$,实验会导致测试样品意外引爆,很可能造成多人伤亡并摧毁实验室;
- 如果 $t \le p$,实验成功,罗伯特会得到一个从区间 $\left[\frac{p}{t}, \frac{p^2}{t^2}\right]$ 中均匀随机抽取的实数。
你能不比奥本海默慢地解决这个问题吗?根据 $p$ 的不同,他可以在不超过 $20$ 次询问内解决。但由于奥本海默毕竟是天才,允许你多进行两次询问。
输入数据
本题没有输入数据。
交互协议
你的程序与交互器的交互通过交换询问和回答进行。
- 要进行第一类询问(“寻求建议”),请输出
ADVICE $t$,其中 $t$ 是 $1$ 到 $10^6$ 之间的整数。作为回应,交互器将返回YES如果 $\sqrt{p} < t \le p$,否则返回NO。 - 要进行一次功率为 $t$ 的实验,请输出
EXPERIMENT $t$,其中 $t$ 应该在 $1$ 到 $10^{12}$ 之间(含),并且:- 如果 $t \le p$,交互器将以
OK $x$的格式返回,其中 $x$ 是从区间 $\left[\frac{p}{t}, \frac{p^2}{t^2}\right]$ 中均匀随机选择的浮点数,小数点后至少 $18$ 位; - 否则,交互器将输出
BOOM并以WA(Wrong Answer) 结束。
- 如果 $t \le p$,交互器将以
- 要报告你已经找到了 $p$ 的值,请输出
SUCCESS $p$,其中 $p$ 是你确定的值。然后:- 如果该值正确,交互器将返回
OK并结束; - 否则,交互器将输出
BOOM并以WA结束。
- 如果该值正确,交互器将返回
在每次输出一行后,不要忘记刷新输出缓冲区(C++ 使用 cout.flush(),Java 使用 System.out.flush(),Python 使用 sys.stdout.flush())。如果你的程序没有刷新输出缓冲区,或者在交互器结束后没有退出(无论得到什么结果),它可能会得到 TL 或 IL 的结果。
如果你的程序进行了超过 $22$ 次第一类和第二类询问,交互器将与其他错误情况一样输出 BOOM 并以 WA 结束。如果你准确地知道了 $p$ 用了 $a_p \le 22$ 次询问,但标准解法用了 $a_j < a_p - 2$ 次询问,你仍然会得到 WA 的结果。
样例
样例 1
输入:
NO
OK 2.612136477990739891
OK 1.000000000000000000
OK
输出:
ADVICE 3
EXPERIMENT 1
EXPERIMENT 2
SUCCESS 2
样例 2
输入:
OK 7390019438.576070785522460938
YES
OK 1.836419809778194523
NO
YES
OK 1.001041327128544323
OK 1.000000000000000000
OK
输出:
EXPERIMENT 2
ADVICE 200000
EXPERIMENT 200000
ADVICE 31000
ADVICE 31100
EXPERIMENT 310500
EXPERIMENT 310771
SUCCESS 310771
