CF1167B.Lost Numbers

普及/提高-

通过率:0%

时间限制:1.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

This is an interactive problem. Remember to flush your output while communicating with the testing program. You may use fflush(stdout) in C++, system.out.flush() in Java, stdout.flush() in Python or flush(output) in Pascal to flush the output. If you use some other programming language, consult its documentation. You may also refer to the guide on interactive problems: https://codeforces.com/blog/entry/45307.

The jury guessed some array aa consisting of 66 integers. There are 66 special numbers — 44, 88, 1515, 1616, 2323, 4242 — and each of these numbers occurs in aa exactly once (so, aa is some permutation of these numbers).

You don't know anything about their order, but you are allowed to ask up to 44 queries. In each query, you may choose two indices ii and jj (1≤i,j≤61 \le i, j \le 6, ii and jj are not necessarily distinct), and you will get the value of ai⋅aja_i \cdot a_j in return.

Can you guess the array aa?

The array aa is fixed beforehand in each test, the interaction program doesn't try to adapt to your queries.

Interaction

Before submitting the answer, you may ask up to 44 queries. To ask a query, print one line in the following format: ?? ii jj, where ii and jj should be two integers such that 1≤i,j≤61 \le i, j \le 6. The line should be ended with a line break character. After submitting a query, flush the output and read the answer to your query — one line containing one integer ai⋅aja_i \cdot a_j. If you submit an incorrect query (or ask more than 44 queries), the answer to it will be one string 0. After receiving such an answer, your program should terminate immediately — otherwise you may receive verdict "Runtime error", "Time limit exceeded" or some other verdict instead of "Wrong answer".

To give the answer, your program should print one line !! a1a_1 a2a_2 a3a_3 a4a_4 a5a_5 a6a_6 with a line break in the end. After that, it should flush the output and terminate gracefully.

这是一个交互式问题。在与评测程序通信时,请务必刷新输出。你可以使用 C++ 中的 fflush(stdout)、Java 中的 system.out.flush()、Python 中的 stdout.flush() 或 Pascal 中的 flush(output) 来刷新输出。若使用其他编程语言,请查阅其文档。你也可以参考交互式问题指南:https://codeforces.com/blog/entry/45307。

出题人预先选定一个由 66 个整数组成的数组 aa。存在 66 个特殊数字:44、88、1515、1616、2323、4242,且每个数字在 aa 中恰好出现一次(即 aa 是这六个数的一个排列)。

你对它们的顺序一无所知,但最多可以提出 44 次询问。每次询问中,你可以选择两个下标 ii 和 jj(1≤i,j≤61 \le i, j \le 6,ii 与 jj 可以相同),系统将返回 ai⋅aja_i \cdot a_j 的值。

你能推断出数组 aa 吗?

在每个测试用例中,数组 aa 是预先固定好的;交互程序不会根据你的询问动态调整。

交互流程

在提交最终答案前,你最多可进行 44 次询问。要提出一次询问,请输出一行,格式为:? ii jj,其中 ii 和 jj 是满足 1≤i,j≤61 \le i, j \le 6 的整数。该行末尾需换行。提交一次询问后,请刷新输出,并读取询问结果——即一行包含单个整数 ai⋅aja_i \cdot a_j 的输入。若你提交了非法询问(例如下标越界),或询问次数超过 44 次,则返回结果为字符串 0。一旦收到该结果,你的程序应立即终止;否则,你可能收到 “运行错误”、“时间超限” 或其他判定结果,而非 “答案错误”。

要提交最终答案,你的程序应输出一行:! a1a_1 a2a_2 a3a_3 a4a_4 a5a_5 a6a_6,末尾换行。之后请刷新输出并正常终止。

输入输出样例

  • 输入#1

    16
    64
    345
    672

    输出#1

    ? 1 1
    ? 2 2
    ? 3 5
    ? 4 6
    ! 4 8 15 16 23 42

说明/提示

If you want to submit a hack for this problem, your test should contain exactly six space-separated integers a1a_1, a2a_2, ..., a6a_6. Each of 66 special numbers should occur exactly once in the test. The test should be ended with a line break character.

如果你想为此题提交一个 Hack 数据,你的测试用例应恰好包含六个以空格分隔的整数 a1a_1, a2a_2, ..., a6a_6。这六个特殊数字在测试用例中必须各自恰好出现一次。测试用例末尾应以换行符结尾。

输入解题思路,AI测评打分。不知道怎么写?

首页