Codeforces Round 770 (Div. 2)
D
Finding Zero
Codeforces
2000
原题
← CE →
翻译中…

image

翻译中…

This is an interactive problem.

翻译中…

We picked an array of whole numbers $a_1, a_2, \ldots, a_n$ ($0 \le a_i \le 10^9$) and concealed exactly one zero in it! Your goal is to find the location of this zero, that is, to find $i$ such that $a_i = 0$.

翻译中…

You are allowed to make several queries to guess the answer. For each query, you can think up three distinct indices $i, j, k$, and we will tell you the value of $\max(a_i, a_j, a_k) - \min(a_i, a_j, a_k)$. In other words, we will tell you the difference between the maximum and the minimum number among $a_i$, $a_j$ and $a_k$.

翻译中…

You are allowed to make no more than $2 \cdot n - 2$ queries, and after that you have two tries to guess where the zero is. That is, you have to tell us two numbers $i$ and $j$ and you win if $a_i = 0$ or $a_j = 0$.

翻译中…

Can you guess where we hid the zero?

翻译中…

Note that the array in each test case is fixed beforehand and will not change during the game. In other words, the interactor is not adaptive.

翻译中…

Input

翻译中…

Each test contains multiple test cases. The first line contains the number of test cases $t$ ($1 \le t \le 500$). Description of the test cases follows.

翻译中…

The first and only line of each test case contains an integer $n$ ($4 \le n \le 1000$) — the length of the array that we picked.

翻译中…

It is guaranteed that the sum of $n$ over all test cases does not exceed $3000$.

翻译中…

Interaction

翻译中…

For each test case, the interaction starts with reading $n$.

翻译中…

To make a query, print "? $i$ $j$ $k$" (without quotes, $1 \le i, j, k \le n$, indices must be distinct). Then you should read our response from standard input, that is, $\max(a_i, a_j, a_k) - \min(a_i, a_j, a_k)$.

翻译中…

If the response is $-1$, it means your program has made an invalid query or has run out of tries. Your program must terminate immediately after reading $-1$, and you will get a verdict Wrong answer. Otherwise you may get any verdict, because the program will continue reading from the closed stream. Note that if the query is correct, the answer will never be $-1$ because $\max(a_i, a_j, a_k) - \min(a_i, a_j, a_k) \geq 0$.

翻译中…

To give the final answer, print "! $i$ $j$" (without the quotes). Printing the same number twice (that is, $i = j$) is allowed. Note that giving this answer is not counted towards the limit of $2 \cdot n - 2$ queries. After that, your program must continue to solve the remaining test cases, or exit if all test cases have been solved.

翻译中…

After printing a query, don't forget to output line feed and flush the output buffer. Otherwise you will get the verdict Idleness limit exceeded. 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;
  • Read documentation for other languages.
翻译中…

Hacks

翻译中…

The first line must contain an integer $t$ ($1 \le t \le 500$) — the count of test cases.

翻译中…

The first line of each test case must contain an integer $n$ ($4 \le n \le 1000$) — the length of the hidden array.

翻译中…

The second line of each test case must contain $n$ integers separated by spaces — $a_1, a_2, \ldots, a_n$ ($0 \le a_i \le 10^9$). There must also be exactly one zero in this array.

翻译中…

The sum of $n$ over all test cases must not exceed $3000$.

翻译中…

Note

翻译中…

Array from sample: $[1, 2, 0, 3]$.

翻译中…

样例

Input #1
1

4

2

3

3

2
Output #1
? 1 2 3

? 2 3 4

? 3 4 1

? 4 1 2

! 2 3
InputCopy OutputCopy
题目信息
题号
1634D
时间限制
1 s
内存限制
256 MB
标签
构造
交互题
数学

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