CF1762D.GCD Queries

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

This is an interactive problem.

There is a secret permutation pp of [0,1,2,,n1][0,1,2,\ldots,n-1] . Your task is to find 22 indices xx and yy ( 1x,yn1 \leq x, y \leq n , possibly x=yx=y ) such that px=0p_x=0 or py=0p_y=0 . In order to find it, you are allowed to ask at most 2n2n queries.

In one query, you give two integers ii and jj ( 1i,jn1 \leq i, j \leq n , iji \neq j ) and receive the value of gcd(pi,pj)\gcd(p_i,p_j)^\dagger .

Note that the permutation pp is fixed before any queries are made and does not depend on the queries.

^\dagger gcd(x,y)\gcd(x, y) denotes the greatest common divisor (GCD) of integers xx and yy . Note that gcd(x,0)=gcd(0,x)=x\gcd(x,0)=\gcd(0,x)=x for all positive integers xx .

输入格式

Each test contains multiple test cases. The first line contains the number of test cases tt ( 1t1041 \leq t \leq 10^4 ). The description of the test cases follows.

The first line of each test case contains a single integer nn ( 2n21042 \leq n \leq 2 \cdot 10^4 ).

After reading the integer nn for each test case, you should begin the interaction.

It is guaranteed that the sum of nn over all test cases does not exceed 21042 \cdot 10^4 .

输出格式

The interaction for each test case begins by reading the integer nn .

To make a query, output "? ii jj " ( 1i,jn1 \leq i, j \leq n , iji \neq j ) without quotes. Afterwards, you should read a single integer — the answer to your query gcd(pi,pj)\gcd(p_i,p_j) . You can make at most 2n2n such queries in each test case.

If you want to print the answer, output "! xx yy " ( 1x,yn1 \leq x, y \leq n ) without quotes. After doing that, read 11 or 1-1 . If px=0p_x=0 or py=0p_y=0 , you'll receive 11 , otherwise you'll receive 1-1 . If you receive 1-1 , your program must terminate immediately to receive a Wrong Answer verdict. Otherwise, you can get an arbitrary verdict because your solution will continue to read from a closed stream.

If you receive the integer 1-1 instead of an answer or a valid value of nn , it means your program has made an invalid query, has exceeded the limit of queries, or has given an incorrect answer on the previous test case. Your program must terminate immediately to receive a Wrong Answer verdict. Otherwise, you can get an arbitrary verdict because your solution will continue to read from a closed stream.

After printing a query or the answer, do not forget to output the 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 documentation for other languages.

Hacks

To hack, use the following format.

The first line should contain a single integer tt ( 1t1041 \leq t \leq 10^4 ).

The first line of each test case should contain a single integer nn ( 2n21042 \leq n \leq 2 \cdot 10^4 ).

The second line of each test case should contain nn space separated integers p1,p2,,pnp_1,p_2,\ldots,p_n . pp should be a permutation of [0,1,2,,n1][0,1,2,\ldots,n-1] .

The sum of nn should not exceed 21042 \cdot 10^4 .

输入输出样例

  • 输入#1

    2
    2
    
    1
    
    1
    5
    
    2
    
    4
    
    1

    输出#1

    ? 1 2
    
    ! 1 2
    
    
    ? 1 2
    
    ? 2 3
    
    ! 3 3

说明/提示

In the first test, the interaction proceeds as follows.

SolutionJuryExplanation 2\texttt{2} There are 2 test cases. 2\texttt{2} In the first test case, the hidden permutation is [1,0][1,0] , with length 22 . ? 1 2\texttt{? 1 2} 1\texttt{1} The solution requests gcd(p1,p2)\gcd(p_1,p_2) , and the jury responds with 11 . ! 1 2\texttt{! 1 2} 1\texttt{1} The solution knows that either p1=0p_1=0 or p2=0p_2=0 , and prints the answer. Since the output is correct, the jury responds with 11 and continues to the next test case. 5\texttt{5} In the second test case, the hidden permutation is [2,4,0,1,3][2,4,0,1,3] , with length 55 . ? 1 2\texttt{? 1 2} 2\texttt{2} The solution requests gcd(p1,p2)\gcd(p_1,p_2) , and the jury responds with 22 . ? 2 3\texttt{? 2 3} 4\texttt{4} The solution requests gcd(p2,p3)\gcd(p_2,p_3) , and the jury responds with 44 . ! 3 3\texttt{! 3 3} 1\texttt{1} The solution has somehow determined that p3=0p_3=0 , and prints the answer. Since the output is correct, the jury responds with 11 .Note that the empty lines in the example input and output are for the sake of clarity, and do not occur in the real interaction.

After each test case, make sure to read 11 or 1-1 .

首页