任意两项的异或值在操作前后保持不变;而只要至少进行一次操作,最后一次选中的元素会变成 000。
因此所有可达序列恰好是原序列,以及对某个原始元素 AkA_kAk 将全体异或 AkA_kAk 得到的序列。于是只需枚举 x∈{0,A1,…,AN}x\in\{0,A_1,\ldots,A_N\}x∈{0,A1,…,AN},计算 ∑i(Ai⊕x)\sum_i(A_i\oplus x)∑i(Ai⊕x) 的最大值。
对每个二进制位预处理原序列中该位为 111 的元素个数。若 xxx 在这一位为 000,贡献为原有的 111 的数量;若为 111,贡献则来自原有的 000。
这样每个候选只需检查 30 位,总时间复杂度为 O(30N)O(30N)O(30N),空间复杂度为 O(N)O(N)O(N)。
注册一个 Hydro 通用账户,您就可以在我们提供的所有在线评测服务上提交代码、参与讨论。
使用您的 Hydro 通用账户