CF1407C Chocolate Bunny

题目描述

这是一个交互题。 我们为你隐藏了一个长度为 $n$ 的排列 $p$,该排列包含 $1$ 到 $n$ 的所有元素。你需要猜出这个排列。为此,你可以给我们两个不同的下标 $i$ 和 $j$,我们会回复 $p_i \bmod p_j$(即 $p_i$ 除以 $p_j$ 的余数)。 我们有足够的耐心来回答最多 $2 \cdot n$ 次询问,因此你需要在这个限制内完成。你能做到吗? 提示:长度为 $n$ 的排列是一个包含 $n$ 个互不相同的整数的数组,这些整数来自 $1$ 到 $n$,顺序任意。例如,$[2,3,1,5,4]$ 是一个排列,但 $[1,2,2]$ 不是排列($2$ 在数组中出现了两次),$[1,3,4]$ 也不是排列($n=3$,但数组中有 $4$)。

输入格式

输入的唯一一行包含一个整数 $n$($1 \le n \le 10^4$),表示排列的长度。

输出格式

交互从读取 $n$ 开始。 然后你最多可以进行 $2 \cdot n$ 次询问,格式如下: - "? x y"($1 \le x, y \le n, x \ne y$) 每次询问后,你应读取一个整数 $k$,其值为 $p_x \bmod p_y$。 当你猜出排列后,输出一行 "! "(不含引号),后接数组 $p$,然后退出。 每次输出询问后不要忘记输出换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 的判罚。具体做法如下: - C++:fflush(stdout) 或 cout.flush() - Java:System.out.flush() - Pascal:flush(output) - Python:stdout.flush() - 其他语言请参考相关文档 如果收到 "-1",请立即退出,此时你会收到 Wrong answer 的判罚。否则,如果继续读取已关闭的流,可能会收到任意判罚。 Hack 格式 第一行输出 $n$($1 \le n \le 10^4$)。第二行输出 $n$ 个整数,表示排列 $p_1, p_2, \ldots, p_n$。

说明/提示

由 ChatGPT 4.1 翻译