CF2157G Isaac's Queries
题目描述
[wavetearz - contemporary chemical bonds](https://soundcloud.com/wavetearz/contemporary-chemical-bonds)
⠀
你已经到达了热门 roguelike 游戏“Isaac's Keybindings”的最终关卡。这一次,你遇到的不是 Boss,而是一个手里握有一个隐藏整数数组 $a_1, a_2, \ldots, a_n$ 的商人,其中对于每个 $i \in [1, n]$ ,都有 $0 \leq a_i < 2^{30}$ 。
保证该数组是随机生成的,也就是说,每个 $a_i$ ($1 \leq i \leq n$)是独立均匀随机地从 $[0, 2^{30})$ 区间中选择的整数,除了样例之外,所有测试点均如此。
定义 $f(u, v) = a_u \oplus a_{u+1} \oplus \ldots \oplus a_v$,其中 $\oplus$ 表示按位异或(XOR)操作。
你可以进行如下形式的查询:$\texttt{? u v}$,其中 $1 \leq u \leq v \leq n$。
对于每个查询,回答如下:
- 如果 $f(u, v) = 0$,答案为 $-1$;
- 否则,答案为 $\lfloor \log_2(f(u, v)) \rfloor$。
每次查询的费用为 $\frac{1}{v-u+1}$ robocoins。对于每份测试,你总共拥有 $300$ robocoins 要通过最多 $30$ 个测试用例(即平均每组最多消耗 $10$ robocoins)。如果你的余额任意时刻变成负数,你会判负。注意余额可以非整数。
你需要在不超出 robocoins 限制的前提下,找出所有 $\frac{n(n+1)}{2}$ 个可能的查询的答案。
输入格式
每组测试包含若干测试用例。第一行为测试用例组数 $t$($1 \le t \le 30$)。每组测试用例描述如下。
每个测试用例的第一行包含一个整数 $n$($n = 3$ 或 $n = 100$),表示数组 $a_1, a_2, \ldots, a_n$ 的长度。保证除了样例外,所有测试的数组均为随机生成。
本题一共包含 $50$ 个测试点(包含样例)。样例测试中 $t = 1$ 且 $n = 3$,其余测试中 $t = 30$ 且 $n = 100$。
本题不允许 Hack。
输出格式
(题目未给出输出格式,需根据实际交互式评测或具体输出要求实现。)
说明/提示
在样例中,隐藏数组为 $[a_1, a_2, a_3] = [2, 4, 6]$。
- 首先,你查询 $\texttt{? 1 2}$。因为 $f(1,2) = a_1 \oplus a_2 = 6$,答案为 $\lfloor \log_2(6) \rfloor = 2$。
- 然后,你查询 $\texttt{? 1 3}$。因为 $f(1,3) = a_1 \oplus a_2 \oplus a_3 = 0$,答案为 $-1$。
- 然后,你查询 $\texttt{? 2 3}$。因为 $f(2, 3) = a_2 \oplus a_3 = 2$,答案为 $\lfloor \log_2(2) \rfloor = 1$。
现在,即使不知道隐藏数组,你也Claim所有 $6$ 个查询的答案。例如,你声称 $\texttt{? 1 1}$ 的答案为 $1$。
你总共花费了 $1/2 + 1/3 + 1/2 = 4/3$ robocoins,低于允许的 $300$ robocoins。
由 ChatGPT 5 翻译