搜娲瘠 发表于 2025-6-8 22:23:20

【题解】CF2077B Finding OR Sum

本文发布于博客园和洛谷,若您在其他平台阅读到此文,请前往博客园获得更好的阅读体验。
跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18771334。
思路

关于此题,我们首先对 \(n | x\) 变一下形,\(n | x = n + (x \& \sim n)\),也就是把 \(n\) 和 \(x\) 同时为 \(1\) 的位在 \(x\) 中删掉,这样的话,为 \(1\) 的位要么在 \(n\),要么在 \(x\),因此我们可以得出 \((x \& \sim n) + (y \& \sim n) = (n | x) + (n | y) - 2 \times n\)。
我们要得到 \((m | x) + (m | y)\) 的值,只需要把每一位上 \(x\) 和 \(y\) 的 \(1\) 的出现数量情况找出来,再根据 \(m\) 的每一位是 \(1\) 还是 \(0\) 来模拟或运算以及位运算即可。
那么我们如何在两次询问的情况下,把每一位的 \(1\) 的出现数量找出来呢?
我们注意到,在二进制位的情况下相加,当前位为第 \(i\) 位,如果第 \(i + 1\) 位和 \(i - 1\) 位都是 \(0\),则两个数的第 \(i\) 位相加只会有这两种情况:

[*]两个 \(1\):第 \(i + 1\) 位为 \(1\),第 \(i\) 位为 \(0\)。
[*]两个 \(0\):第 \(i + 1\) 位和 第 \(i\) 位均为 \(0\)。
[*]一个 \(1\) 一个 \(0\):第 \(i\) 位为 \(1\),第 \(i + 1\) 位为 \(0\)。
那么,我们就可以根据上面那个式子,求一次奇数位全部变成 \(0\) 的两个数的和,把偶数位的 \(1\) 的出现次数情况求出来,求一次偶数位全部变成 \(0\) 的两个数的和,把奇数位的 \(1\) 的出现次数情况求出来。
然后,根据下面的规则逐位求解:

[*]如果 \(m\) 第 \(i\) 位为 \(1\),那么这一位对答案的贡献就是 \(1 \ll (i + 1)\)。
[*]如果 \(m\) 第 \(i\) 位为 \(0\),那么这一位对答案的贡献就看 \(1\) 的出现次数,如果出现次数为 \(2\),那就是 \(1 \ll (i + 1)\),如果出现次数为 \(1\),那就是 \(1 \ll i\)。
AC CODE

#include #define inf 2e18#define int long longconst int N = 2e5 + 9;int ask(int x) {    std::coutop;    return op;}void solve(){    std::vector a(30);    int tmp = 0;    for(int i = 0;i < 30;i += 2) {      tmp |= (1ll

赖琳芳 发表于 2025-10-8 13:46:02

用心讨论,共获提升!

诈知 发表于 2025-10-14 05:22:07

yyds。多谢分享

簑威龙 发表于 2025-12-11 15:00:37

收藏一下   不知道什么时候能用到

辉伫 发表于 2025-12-21 07:06:16

用心讨论,共获提升!

邹语彤 发表于 2025-12-27 19:14:27

感谢分享,下载保存了,貌似很强大

豺独 发表于 2025-12-28 17:12:20

感谢分享

饨篦 发表于 2026-1-1 16:35:52

东西不错很实用谢谢分享

敞撬 发表于 2026-1-7 03:07:12

这个有用。

粒浊 发表于 2026-1-14 02:12:59

鼓励转贴优秀软件安全工具和文档!

欤夤 发表于 2026-1-15 23:31:23

前排留名,哈哈哈

指陡 发表于 2026-1-19 10:08:21

分享、互助 让互联网精神温暖你我

列蜜瘘 发表于 2026-1-20 16:14:18

这个好,看起来很实用

阴昭昭 发表于 2026-1-23 03:52:52

很好很强大我过来先占个楼 待编辑

佴莘莘 发表于 2026-1-23 08:51:41

谢谢分享,试用一下

章海 发表于 2026-1-24 08:58:32

新版吗?好像是停更了吧。

决台 发表于 2026-1-26 11:52:40

这个好,看起来很实用

墨淳雅 发表于 5 天前

谢谢楼主提供!

劳暄美 发表于 4 天前

这个有用。

佴莘莘 发表于 1 小时前

感谢发布原创作品,程序园因你更精彩
页: [1]
查看完整版本: 【题解】CF2077B Finding OR Sum