1 条题解
-
0
E. Finding OR Sum 详细题解
一、关键数学恒等式
本题核心突破口是推导出:
的位按位展开式。
对任意一位二进制位 ( 或 ),观察这一位在 中的取值:
设:
- : 的第 位
- : 的第 位
- : 的第 位
则该位对总和的贡献为:
$$(n_b \mid x_b) \cdot 2^b + (n_b \mid y_b) \cdot 2^b $$按 分类:
1)当 时
贡献为:
2)当 时
贡献恒为:
整体表达式
令:
- (所有位 的加权和)
则可以得到全局恒等式:
$$\boxed{(n \mid x)+(n \mid y) = S + \sum_{b:\,n_b=1,\,(x|y)_b=0} 2^b} $$更简洁的最终形式:
$$\boxed{(n \mid x)+(n \mid y) = (x + y) + (n \,\&\, \sim\!(x \mid y))} $$
二、变量定义
我们只需要求出两个值:
一旦知道 ,对任意 都可以 算出答案:
三、询问策略(最多 2 次)
方案:用 和
- 询问
直接得到 。
- 询问
这个询问其实可以不用,因为我们只需要 和 ,而:
- 用 得到
- 再随便问一个 即可解出
最简合法策略(只用 1 次或 2 次)
- 第 1 次问 ,得到 。
- 第 2 次问任意 (比如 ),得到:
移项得:
从而可以逐位恢复出 。
实际最优解法: 只需要询问 一次,就足够推出所有需要信息,满足 次限制。
四、最终答案公式
拿到 和 后,对给定的 :
$$\boxed{ (m \mid x)+(m \mid y) = A + (m \,\&\, \sim\! B) } $$
五、算法流程
- 询问 ,得到 。 2.(可选)再询问一次任意 ,解出 。
- 输出
!。 - 读入 。
- 用公式计算答案并输出。
六、复杂度
- 时间: 每位处理
- 询问数:,完全满足题目限制
七、一句话总结
- 只和 以及 有关。
- 问 直接得到 。
- 再问一次即可推出 。
- 之后任意 都可以 计算。
- 1
信息
- ID
- 6367
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者