CF2156D.Find the Last Number

普及+/提高

通过率:0%

AC君温馨提醒

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

题目描述

这是一个交互题。

有一个长度为 nn 的隐藏排列 pp。你可以通过以下方式与它进行最多 2n2n 次的交互:

  • 选择两个整数 ii 和 xx,其中 1≤i≤n−11\le i\le n-1 且 1≤x≤1091\le x\le 10^9。裁判会返回 0\mathtt{0} ,如果 pi & xp_i\,\&\,x 等于 00;否则返回 1\mathtt{1}。

重要提示:你不能对最后一个元素 pnp_n 进行提问(因为 i≤n−1i\le n-1)。

你的目标是在最多 2n2n 次查询内确定排列的最后一个元素 pnp_n 的值。

注意,交互器是非自适应的。这意味着隐藏排列 pp 在开始时就已经固定,并不会因为你的查询而改变。

一个长度为 nn 的排列是由 nn 个 11 到 nn 的不同整数组成的数组,排列顺序任意。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是排列(22 出现了两次),[1,3,4][1,3,4] 也不是排列(n=3n=3 但其中有 44)。

&\& 表示按位与运算。

输入格式

每个测试点包含多组测试数据。第一行包含一个整数 tt (1≤t≤1031\le t\le 10^3),表示测试数据组数。

每组测试数据的第一行包含一个整数 nn(2≤n≤2⋅1042\leq n\leq 2\cdot 10^4),表示排列 pp 的长度。

对于每一组测试数据,在读入 nn 后,你应开始与交互器交互,并在继续下一组测试数据前输出答案。

保证所有测试数据中 nn 的总和不超过 2⋅1042\cdot 10^4。

输出格式

(本题为交互题,具体格式请结合题目内容。)

输入输出样例

  • 输入#1

    2
    2
    
    0
    
    1
    
    3
    
    1
    
    0
    
    1

    输出#1

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

说明/提示

在第一个测试中,交互过程如下。

SolutionJuryExplanation
2\texttt{2} 表示有 2 组测试数据。
2\texttt{2} 第一组测试数据中,隐藏排列为 [2,1][2,1](长度为 22)。
? 1 1\texttt{? 1 1} 0\texttt{0}
选手询问 p1 & 1p_1\,\&\,1。由于 p1=2p_1 = 2 且 2 & 1=02\,\&\,1 = 0,因此裁判返回 00。

? 1 2\texttt{? 1 2} 1\texttt{1}
选手询问 p1 & 2p_1\,\&\,2。由于 p1=2p_1 = 2 且 2 & 2=22\,\&\,2 = 2,因此裁判返回 11。

! 1\texttt{! 1}
选手确定最后一个元素为 11,因为通过前面的查询已知第一个元素不是 11。

3\texttt{3} 第二组测试数据,隐藏排列为 [1,3,2][1,3,2](长度为 33)。
? 1 3\texttt{? 1 3} 1\texttt{1}
选手询问 p1 & 3p_1\,\&\,3。由于 p1=1p_1 = 1 且 1 & 3=11\,\&\,3 = 1,因此裁判返回 11。

? 1 2\texttt{? 1 2} 0\texttt{0}
选手询问 p1 & 2p_1\,\&\,2。由于 p1=1p_1 = 1 且 1 & 2=01\,\&\,2 = 0,因此裁判返回 00。

? 2 3\texttt{? 2 3} 1\texttt{1}
选手询问 p2 & 3p_2\,\&\,3。由于 p2=3p_2 = 3 且 3 & 3=33\,\&\,3 = 3,因此裁判返回 11。

! 2\texttt{! 2}
选手确定最后一个元素为 22。

请注意,示例输入输出中的空行仅为便于阅读,实际交互时不会出现。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页