Codeforces Round 720 (Div. 2)
C
Nastia and a Hidden Permutation
Codeforces
2000
原题
← BD →
翻译中…

This is an interactive problem!

翻译中…

Nastia has a hidden permutation $p$ of length $n$ consisting of integers from $1$ to $n$. You, for some reason, want to figure out the permutation. To do that, you can give her an integer $t$ ($1 \le t \le 2$), two different indices $i$ and $j$ ($1 \le i, j \le n$, $i \neq j$), and an integer $x$ ($1 \le x \le n - 1$).

翻译中…

Depending on $t$, she will answer:

翻译中…
  • $t = 1$: $\max{(\min{(x, p_i)}, \min{(x + 1, p_j)})}$;
  • $t = 2$: $\min{(\max{(x, p_i)}, \max{(x + 1, p_j)})}$.
翻译中…

You can ask Nastia at most $\lfloor \frac {3 \cdot n} { 2} \rfloor + 30$ times. It is guaranteed that she will not change her permutation depending on your queries. Can you guess the permutation?

翻译中…

Input

翻译中…

The input consists of several test cases. In the beginning, you receive the integer $T$ ($1 \le T \le 10\,000$) — the number of test cases.

翻译中…

At the beginning of each test case, you receive an integer $n$ ($3 \le n \le 10^4$) — the length of the permutation $p$.

翻译中…

It's guaranteed that the permutation is fixed beforehand and that the sum of $n$ in one test doesn't exceed $2 \cdot 10^4$.

翻译中…

Interaction

翻译中…

To ask a question, print "? $t$ $i$ $j$ $x$" ($t = 1$ or $t = 2$, $1 \le i, j \le n$, $i \neq j$, $1 \le x \le n - 1$) Then, you should read the answer.

翻译中…

If we answer with $−1$ instead of a valid answer, that means you exceeded the number of queries or made an invalid query. Exit immediately after receiving $−1$ and you will see the Wrong Answer verdict. Otherwise, you can get an arbitrary verdict because your solution will continue to read from a closed stream.

翻译中…

To print the answer, print "! $p_1$ $p_2$ $\ldots$ $p_{n}$ (without quotes). Note that answering doesn't count as one of the $\lfloor \frac {3 \cdot n} {2} \rfloor + 30$ queries.

翻译中…

After printing a query or printing the answer, do not forget to output end of line and flush the output. Otherwise, you will get Idleness limit exceeded. To do this, use:

翻译中…
  • fflush(stdout) or cout.flush() in C++;
  • System.out.flush() in Java;
  • flush(output) in Pascal;
  • stdout.flush() in Python;
  • See the documentation for other languages.
翻译中…

Hacks

翻译中…

To hack the solution, use the following test format.

翻译中…

The first line should contain a single integer $T$ ($1 \le T \le 10\,000$) — the number of test cases.

翻译中…

For each test case in the first line print a single integer $n$ ($3 \le n \le 10^4$) — the length of the hidden permutation $p$.

翻译中…

In the second line print $n$ space-separated integers $p_1, p_2, \ldots, p_n$ ($1 \le p_i \le n$), where $p$ is permutation.

翻译中…

Note that the sum of $n$ over all test cases should not exceed $2 \cdot 10^4$.

翻译中…

Note

翻译中…

Consider the first test case.

翻译中…

The hidden permutation is $[3, 1, 4, 2]$.

翻译中…

We print: "? $2$ $4$ $1$ $3$" and get back $\min{(\max{(3, p_4}), \max{(4, p_1)})} = 3$.

翻译中…

We print: "? $1$ $2$ $4$ $2$" and get back $\max{(\min{(2, p_2)}, \min{(3, p_4)})} = 2$.

翻译中…

Consider the second test case.

翻译中…

The hidden permutation is $[2, 5, 3, 4, 1]$.

翻译中…

We print: "? $2$ $3$ $4$ $2$" and get back $\min{(\max{(2, p_3}), \max{(3, p_4)})} = 3$.

翻译中…

样例

Input #1
2
4

3

2

5

3
Output #1
? 2 4 1 3

? 1 2 4 2

! 3 1 4 2

? 2 3 4 2

! 2 5 3 4 1
InputCopy OutputCopy
题目信息
题号
1521C
时间限制
3 s
内存限制
256 MB
标签
构造
交互题

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。