ace5 and Task Order
题意翻译
这是一道交互题。
交互库会先生成一个长度为 $n$ 的 $1\sim n$ 排列与一个 $[1,n]$ 内的正整数 $x$。你需要通过询问确定整个排列。
你可以通过格式 `? i` 向交互库询问,返回值有三种:
* `<`:代表 $a_i<x$,该次询问后,$x\leftarrow x-1$;
* `>`:代表 $a_i>x$,该次询问后,$x\leftarrow x+1$;
* `=`:代表 $a_i=x$。
如果你确定了整个排列,需要先输出 `!`,然后紧接着一行输出你的答案。
你的询问次数不应超过 $40n$,$n\leq 2000$。
题目描述
This is an interactive problem!
In the new round, there were $ n $ tasks with difficulties from $ 1 $ to $ n $ . The coordinator, who decided to have the first round with tasks in unsorted order of difficulty, rearranged the tasks, resulting in a permutation of difficulties from $ 1 $ to $ n $ . After that, the coordinator challenged ace5 to guess the permutation in the following way.
Initially, the coordinator chooses a number $ x $ from $ 1 $ to $ n $ .
ace5 can make queries of the form: $ ?\ i $ . The answer will be:
- $ > $ , if $ a_i > x $ , after which $ x $ increases by $ 1 $ .
- $ < $ , if $ a_i < x $ , after which $ x $ decreases by $ 1 $ .
- $ = $ , if $ a_i = x $ , after which $ x $ remains unchanged.
The task for ace5 is to guess the permutation in no more than $ 40n $ queries. Since ace5 is too busy writing the announcement, he has entrusted this task to you.
输入输出格式
输入格式
The first line contains a single integer $ t $ ( $ 1 \leq t \leq 1000 $ ) — the number of test cases.
输出格式
The interaction between your program and the jury's program begins with reading a positive integer $ n $ ( $ 1 \leq n \leq 2000 $ ) — the length of the hidden permutation.
To make a query, output a line in the format "? i", where $ 1 \leq i \leq n $ .
As an answer, you will receive:
- ">", if $ a_i $ > $ x $ , after which $ x $ will increase by $ 1 $ .
- "<", if $ a_i $ < $ x $ , after which $ x $ will decrease by $ 1 $ .
- "=", if $ a_i $ = $ x $ , after which $ x $ will remain unchanged.
You can make no more than $ 40n $ queries. To output the answer, you need to print "! a\_1 a\_2 ... a\_n", where $ 1 \leq a_i \leq n $ , and all of them are distinct. Outputting the answer does not count as a query.
If your program makes more than $ 40n $ queries for one test case, or makes an invalid query, then the response to the query will be -1. After receiving such a response, your program should immediately terminate to receive the verdict Wrong Answer. Otherwise, it may receive any other verdict.
After outputting a query, do not forget to print a newline and flush the output buffer. Otherwise, you will receive the verdict Presentation Error. To flush the buffer, 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.
It is guaranteed that the sum of $ n $ over all test cases does not exceed $ 2000 $ .
The interactor in this problem is not adaptive.
Hacks:
To make a hack, use the following format:
The first line contains a single integer $ t $ — the number of test cases.
The description of each test case should consist of two lines. The first line contains the numbers $ n $ and $ x $ ( $ 1 \leq x \leq n \leq 2000 $ ) — the length of the hidden permutation and the initial value of the number $ x $ . The second line contains $ n $ distinct numbers $ a_1, a_2, \ldots, a_n $ ( $ 1 \leq a_i \leq n $ ) — the permutation that the jury should choose in this test case.
Sum of $ n $ over all test cases should not exceed $ 2000 $ .
输入输出样例
输入样例 #1
2
5
>
=
<
=
<
<
2
>
输出样例 #1
? 4
? 2
? 1
? 5
? 1
? 3
! 2 4 1 5 3
? 1
! 2 1
说明
In the first test, the hidden permutation is $ a $ = \[ $ 2,4,1,5,3 $ \], and the initial value of $ x $ is $ 3 $ .
In the second test, the hidden permutation is $ a $ = \[ $ 2,1 $ \], and the initial value of $ x $ is $ 1 $ .