CF1167B Lost Numbers

题目描述

这是一个交互题。在与测试程序通信时,请记得刷新输出。你可以在 C++ 中使用 fflush(stdout),在 Java 中使用 system.out.flush(),在 Python 中使用 stdout.flush(),在 Pascal 中使用 flush(output) 来刷新输出。如果你使用其他编程语言,请查阅相关文档。你也可以参考关于交互题的指南:。 评测程序已经猜测了一个由 $6$ 个整数构成的数组 $a$。有 $6$ 个特殊数字——$4$、$8$、$15$、$16$、$23$、$42$——每个数字在 $a$ 中恰好出现一次(因此,$a$ 是这 $6$ 个数字的某种排列)。 你并不知道它们的顺序,但你可以最多询问 $4$ 次。在每次询问中,你可以选择两个下标 $i$ 和 $j$($1 \le i, j \le 6$,$i$ 和 $j$ 不一定不同),你将得到 $a_i \cdot a_j$ 的值作为回应。 你能猜出数组 $a$ 吗? 对于每个测试,数组 $a$ 是预先固定的,交互程序不会根据你的询问做出自适应的改变。

输入格式

无输入。

输出格式

在提交答案前,你最多可以询问 $4$ 次。每次询问,输出一行,格式为:$?~i~j$,其中 $i$ 和 $j$ 是两个整数,满足 $1 \le i, j \le 6$。该行末尾需换行。每次询问后,刷新输出并读取一行作为回应,内容为一个整数 $a_i \cdot a_j$。如果你提交了不合法的询问(或询问次数超过 $4$ 次),回应将是字符串 $0$。收到这样的回应后,你的程序应立即终止,否则可能会收到“运行时错误”、“超时”或其他非“答案错误”的判定。 要给出答案时,你的程序应输出一行:$!~a_1~a_2~a_3~a_4~a_5~a_6$,末尾换行。之后刷新输出并正常结束程序。

说明/提示

如果你想为本题提交 hack 数据,你的测试数据应包含恰好六个用空格分隔的整数 $a_1, a_2, \ldots, a_6$。每个特殊数字恰好出现一次。测试数据末尾需换行。 由 ChatGPT 4.1 翻译