A14344 | Median Queries
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
This is an interactive problem.
There is a secret permutation $p$ ( $1$ -indexed) of numbers from $1$ to $n$ . More formally, for $1 \leq i \leq n$ , $1 \leq p[i] \leq n$ and for $1 \leq i < j \leq n$ , $p[i] \neq p[j]$ . It is known that $p[1]<p[2]$ .
In $1$ query, you give $3$ distinct integers $a,b,c$ ( $1 \leq a,b,c \leq n$ ), and receive the median of $\{|p[a]-p[b]|,|p[b]-p[c]|,|p[a]-p[c]|\}$ .
In this case, the median is the $2$ -nd element ( $1$ -indexed) of the sequence when sorted in non-decreasing order. The median of $\{4,6,2\}$ is $4$ and the median of $\{0,123,33\}$ is $33$ .
Can you find the secret permutation in not more than $2n+420$ queries?
Note: the grader is not adaptive: the permutation is fixed before any queries are made.
There is a secret permutation $p$ ( $1$ -indexed) of numbers from $1$ to $n$ . More formally, for $1 \leq i \leq n$ , $1 \leq p[i] \leq n$ and for $1 \leq i < j \leq n$ , $p[i] \neq p[j]$ . It is known that $p[1]<p[2]$ .
In $1$ query, you give $3$ distinct integers $a,b,c$ ( $1 \leq a,b,c \leq n$ ), and receive the median of $\{|p[a]-p[b]|,|p[b]-p[c]|,|p[a]-p[c]|\}$ .
In this case, the median is the $2$ -nd element ( $1$ -indexed) of the sequence when sorted in non-decreasing order. The median of $\{4,6,2\}$ is $4$ and the median of $\{0,123,33\}$ is $33$ .
Can you find the secret permutation in not more than $2n+420$ queries?
Note: the grader is not adaptive: the permutation is fixed before any queries are made.
输入格式
The first line of input contains a single integer $t$ $(1 \leq t \leq 1000)$ — the number of testcases.
The first line of each testcase consists of a single integer $n$ $(20 \leq n \leq 100000)$ — the length of the secret permutation.
It is guaranteed that the sum of $n$ over all test cases does not exceed $100000$ .
The first line of each testcase consists of a single integer $n$ $(20 \leq n \leq 100000)$ — the length of the secret permutation.
It is guaranteed that the sum of $n$ over all test cases does not exceed $100000$ .
输出格式
For each testcase, you begin the interaction by reading $n$ .
To perform a query, output "? a b c" where $a,b,c$ is the $3$ indices you want to use for the query.
Numbers have to satisfy $1 \leq a,b,c \leq n$ and $a \neq b$ , $b \neq c$ , $a \neq c$ .
For each query, you will receive a single integer $x$ : the median of $\{|p[a]-p[b]|,|p[b]-p[c]|,|p[a]-p[c]|\}$ .
In case your query is invalid or you asked more than $2n+420$ queries, the interactor will print "−1" and will finish interaction. You will receive Wrong answer verdict. Make sure to exit immediately to avoid getting other verdicts.
When you have determined the secret permutation, output "! p\[1\] p\[2\] ... p\[n\]". If the secret permutation is correct, the interactor will print "1". Otherwise, the interactor will print "-1" and will finish interaction. You will receive Wrong answer verdict. Make sure to exit immediately to avoid getting other verdicts.
After printing a query do not forget to output the end of line and flush the output. Otherwise, you will get Idleness limit exceeded verdict.
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 documentation for other languages.
Hacks:
To hack, use the following format of test:
The first line should contain a single integer $t$ ( $1 \leq t \leq 1000$ ) — the number of testcases.
The first line of each testcase should contain a single integer $n$ ( $20 \leq n \leq 100000$ ) — the length of the secret permutation.
The following line of should contain $n$ integers $p[1],p[2],p[3],\ldots,p[n]$ . $p[1]<p[2]$ and $p$ must be a permutation of integers from $1$ to $n$ .
You must ensure that the sum of $n$ over all testcases does not exceed $100000$ .
To perform a query, output "? a b c" where $a,b,c$ is the $3$ indices you want to use for the query.
Numbers have to satisfy $1 \leq a,b,c \leq n$ and $a \neq b$ , $b \neq c$ , $a \neq c$ .
For each query, you will receive a single integer $x$ : the median of $\{|p[a]-p[b]|,|p[b]-p[c]|,|p[a]-p[c]|\}$ .
In case your query is invalid or you asked more than $2n+420$ queries, the interactor will print "−1" and will finish interaction. You will receive Wrong answer verdict. Make sure to exit immediately to avoid getting other verdicts.
When you have determined the secret permutation, output "! p\[1\] p\[2\] ... p\[n\]". If the secret permutation is correct, the interactor will print "1". Otherwise, the interactor will print "-1" and will finish interaction. You will receive Wrong answer verdict. Make sure to exit immediately to avoid getting other verdicts.
After printing a query do not forget to output the end of line and flush the output. Otherwise, you will get Idleness limit exceeded verdict.
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 documentation for other languages.
Hacks:
To hack, use the following format of test:
The first line should contain a single integer $t$ ( $1 \leq t \leq 1000$ ) — the number of testcases.
The first line of each testcase should contain a single integer $n$ ( $20 \leq n \leq 100000$ ) — the length of the secret permutation.
The following line of should contain $n$ integers $p[1],p[2],p[3],\ldots,p[n]$ . $p[1]<p[2]$ and $p$ must be a permutation of integers from $1$ to $n$ .
You must ensure that the sum of $n$ over all testcases does not exceed $100000$ .
输入输出样例
输入 #1
1 20 6 9 1
输出 #1
? 1 5 2 ? 20 19 2 ! 9 10 19 7 16 18 11 14 15 6 20 8 17 4 5 3 12 2 13 1
The secret permutation is $\{9,10,19,7,16,18,11,14,15,6,20,8,17,4,5,3,12,2,13,1\}$ .
For the first query, the values of $(a,b,c)$ is $(1,5,2)$ . Since $p[1]=9$ , $p[5]=16$ and $p[2]=10$ . The return value is the median of $\{|9-16|,|16-10|,|9-10|\}$ which is $6$ .
For the second query, the values of $(a,b,c)$ is $(20,19,2)$ . Since $p[20]=1$ , $p[19]=13$ and $p[2]=10$ . The return value is the median of $\{|1-13|,|13-10|,|1-10|\}$ which is $9$ .
By some miracle, we have figured out that the secret permutation is $\{9,10,19,7,16,18,11,14,15,6,20,8,17,4,5,3,12,2,13,1\}$ . We output it and receive $1$ from the interactor, meaning that we have guessed the secret permutation correctly.
For the first query, the values of $(a,b,c)$ is $(1,5,2)$ . Since $p[1]=9$ , $p[5]=16$ and $p[2]=10$ . The return value is the median of $\{|9-16|,|16-10|,|9-10|\}$ which is $6$ .
For the second query, the values of $(a,b,c)$ is $(20,19,2)$ . Since $p[20]=1$ , $p[19]=13$ and $p[2]=10$ . The return value is the median of $\{|1-13|,|13-10|,|1-10|\}$ which is $9$ .
By some miracle, we have figured out that the secret permutation is $\{9,10,19,7,16,18,11,14,15,6,20,8,17,4,5,3,12,2,13,1\}$ . We output it and receive $1$ from the interactor, meaning that we have guessed the secret permutation correctly.
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?
提交通过
评测结果:Accepted