CF1867E1 Salyg1n and Array (simple version)

题目描述

这是该问题的简单版本。两个版本的唯一区别在于查询次数的限制。在本版本中,你最多可以进行 $100$ 次查询。只有当你同时解决了两个版本的问题后,才能进行 Hack。 这是一个交互题! salyg1n 给了你一个正整数 $k$,并想和你玩一个游戏。他选择了一个长度为 $n$ 的整数数组 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 10^9$)。你需要输出 $a_1 \oplus a_2 \oplus \ldots \oplus a_n$,其中 $\oplus$ 表示[按位异或](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)操作。你可以进行如下类型的查询: - $?$ $i$ :对于此查询,你将收到 $a_i \oplus a_{i + 1} \oplus \ldots \oplus a_{i + k - 1}$ 的结果。同时,在此查询后,子数组 $a_i, a_{i + 1}, \ldots, a_{i + k - 1}$ 会被反转,即原数组 $a$ 会变为:$a_1, a_2, \ldots, a_{i - 1}, a_{i + k - 1}, a_{i + k - 2}, \ldots, a_{i + 1}, a_i, a_{i + k}, \ldots, a_n$。 你最多可以进行 $100$ 次查询来解答本题。

输入格式

第一行包含一个整数 $t$($1 \leq t \leq 1000$),表示测试用例的数量。

输出格式

你的程序与评测程序的交互从读取两个正的偶数 $n$ 和 $k$ 开始($1 \leq k \leq n \leq k^2 \leq 2500$),分别表示所选数组的长度和查询子数组的长度。 为了获得 $a_i \oplus a_{i + 1} \oplus \ldots \oplus a_{i + k - 1}$ 的值,请按格式输出查询 $?$ $i$($1 \leq i \leq n - k + 1$)。然后读取一个整数,表示该查询的答案。 你最多可以进行 $100$ 次查询。当你准备好输出答案时,请按格式输出 $!$ $x$。之后,继续处理下一个测试用例,或在最后一个测试用例后终止程序。输出答案不计入 $100$ 次查询之内。 如果你的程序对某组输入数据进行了超过 $100$ 次查询,或进行了无效查询,则该查询的响应将为 $-1$。收到此响应后,你的程序应立即终止以获得 Wrong Answer 判定,否则可能会收到其他判定。 每次输出查询后不要忘记输出换行并刷新输出缓冲区,否则会收到 Idleness limit exceeded 判定。具体操作如下: - C++:fflush(stdout) 或 cout.flush() - Java:System.out.flush() - Pascal:flush(output) - Python:stdout.flush() - 其他语言请查阅相关文档。 保证所有测试用例中 $n$ 的总和不超过 $10000$。本题的交互器是非自适应的。 Hack 格式: 进行 Hack 时,格式如下: 第一行包含一个整数 $t$,表示测试用例数量。 每个测试用例的描述包含两行。第一行包含 $n$ 和 $k$,分别表示所选数组的长度和查询子数组的长度。第二行包含 $n$ 个数 $a_1, a_2, \ldots, a_n$,表示评测程序为该测试用例选择的数组。

说明/提示

在第一个测试用例中,评测程序选择的数组为 $a = [4, 2, 5, 1]$。 在第二个测试用例中,评测程序选择的数组为 $a = [5, 7, 1, 3, 3, 7]$。 由 ChatGPT 4.1 翻译