#CF2022D1. 杀手(简单版本)

杀手(简单版本)

D1. 杀手(简单版本)

时间限制:每个测试 2.52.5
内存限制256256 MB

这是本题的简单版本。在此版本中,你最多可以询问 n+69n + 69 个问题。只有解决了两个版本的题目,你才能进行 Hack。

这是一个交互式问题。

在墨西哥国家 IOI 训练中,玩一个叫做 "Asesino"(杀手)的游戏是传统,该游戏类似于 "Among Us" 或 "Mafia"。

今天,有 nn 名玩家,编号为 11nn,将扮演以下三种角色玩 "Asesino" 游戏:

  • 骑士:骑士总是说真话。
  • 恶棍:恶棍总是说谎。
  • 内鬼:内鬼是一个大家都以为是骑士、但实际上是恶棍的人。

每个玩家将被分配一个角色。游戏中恰好有一个内鬼,但骑士和恶棍的数量可以是任意值(可能为零)。

作为游戏主持人,你意外忘记了所有人的角色,但你需要找出哪个玩家是内鬼。

为了找出内鬼,你将询问一些问题。在每个问题中,你将选择两名玩家 iijj1i,jn1 \le i, j \le niji \ne j),并询问玩家 ii 是否认为玩家 jj 是骑士。结果如下表所示:

询问者 ii 的角色 被问者 jj 的角色 回答
骑士 骑士
恶棍
内鬼
恶棍 骑士
恶棍
内鬼
内鬼 骑士
恶棍
内鬼

例如,右上角的单元格(行“骑士”,列“内鬼”)中的“是”表示当 ii 是骑士且 jj 是内鬼时的回答。

找出内鬼,最多询问 n+69n + 69 个问题。

注意:评测系统是自适应的:玩家的角色在开始时并不固定,可能会根据你的问题而改变。但是,保证存在一个与之前所有问题一致的角色分配,且符合本题的约束条件。


输入格式

第一行包含一个整数 tt1t1031 \le t \le 10^3),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn3n1053 \le n \le 10^5),表示玩游戏的人数。

保证所有测试用例的 nn 之和不超过 10510^5


交互格式

要询问一个问题,请按以下格式输出一行:

? i j

其中 1i,jn1 \le i, j \le niji \ne j —— 询问玩家 ii 是否认为玩家 jj 是骑士。

评测系统会输出 1 表示玩家 ii 认为玩家 jj 是骑士,输出 0 表示否。

当你确定内鬼是谁后,按以下格式输出一行:

! i

其中 1in1 \le i \le n —— 内鬼是玩家 ii

注意:回答不计入 n+69n + 69 个问题的限制。

如果你输出了无效内容、使用了超过 n+69n + 69 个问题或错误地确定了内鬼,评测系统将返回 -1,你将收到 Wrong Answer 判定。收到 -1 后,你的程序必须立即终止。否则,你可能会收到任意判定,因为你的程序可能正在从已关闭的流中读取。

每次输出查询后,不要忘记输出换行并刷新输出缓冲区。否则,你会收到 Idleness limit exceeded 错误。为此,请使用:

  • C++:fflush(stdout)cout.flush()
  • Java:System.out.flush()
  • Python:sys.stdout.flush()
  • Rust:std::io::stdout().flush()
  • 其他语言请参阅文档。

Hack 格式

对于 Hack,请使用以下格式:

第一行包含一个整数 tt —— 测试用例数量。

每个测试用例的第一行包含整数 nn 后跟字符串 "manual"

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai1-1 \le a_i \le 1)—— 每个玩家的角色。11 表示骑士,00 表示恶棍,1-1 表示内鬼。必须恰好有一个内鬼,即恰好有一个下标 ii 使得 ai=1a_i = -1

例如,示例输入的 Hack 格式为:

2
7 manual
0 1 0 -1 0 1 0
4 manual
0 1 -1 0

示例

输入

2
7

1

0

0

1

1

0

0

1

4

0

1

1

1

输出


? 1 3

? 7 6

? 2 5

? 6 2

? 4 5

? 4 6

? 1 4

? 2 4

! 4

? 1 2

? 2 3

? 3 4

? 4 1

! 3

注意

请注意,示例测试用例并不代表询问问题的最优策略,仅用于演示交互格式。具体来说,我们无法从示例中询问的问题确定内鬼是谁。

在第一个测试用例的示例中,索引 2266 的玩家是骑士,索引 11335577 的玩家是恶棍,内鬼在索引 44。以下是对所问问题的解释:

  • 第一个查询:玩家 ii 是恶棍,玩家 jj 是恶棍。回答是“是”,因为恶棍总是说谎。
  • 第二个查询:玩家 ii 是恶棍,玩家 jj 是骑士。回答是“否”,因为恶棍总是说谎。
  • 第三个查询:玩家 ii 是骑士,玩家 jj 是恶棍。回答是“否”,因为骑士总是说真话。
  • 第四个查询:玩家 ii 是骑士,玩家 jj 是骑士。回答是“是”,因为骑士总是说真话。
  • 第五个查询:玩家 ii 是内鬼,玩家 jj 是恶棍。回答是“是”,因为内鬼总是说谎。
  • 第六个查询:玩家 ii 是内鬼,玩家 jj 是骑士。回答是“否”,因为内鬼总是说谎。
  • 第七个查询:玩家 ii 是恶棍,玩家 jj 是内鬼。回答是“否”,因为恶棍总是说谎,且恶棍认为内鬼是骑士。
  • 第八个查询:玩家 ii 是骑士,玩家 jj 是内鬼。回答是“是”,因为骑士总是说真话,且骑士认为内鬼是骑士。