题解:CF2039C2 Shohag Loves XOR (Hard Version)

· · 题解

非常好的题目,十分考验对位运算本质的理解。

文章开头先列一下等式:(下文按位与以 \land 表示,下文或位与以 \lor 表示)

\begin{align} 0 \le &a \land b \le \min(a,b) \\ \max(a,b) \le &a \lor b \le a+ b \\ |a-b| \le &a \oplus b \le a+b \\ &a+b=a \oplus b+2(a \land b) \end{align}

Problem

CF2039C1

CF2039C2

Easy Version Solution

给定 x,m,求有多少 y 满足 y \in [1,m],x \neq yx \oplus yxy 的因子。

根据题意可直接推出 $x \oplus y < x$ 且 $x \oplus y < y$。 由式 4 可得: $$ \begin{aligned} x + y - 2(x \land y) < x \Rightarrow y < 2(x \land y) \le 2\min(x, y) \\ x + y - 2(x \land y) < y \Rightarrow x < 2(x \land y) \le 2\min(x, y) \end{aligned} $$ $x$ 的上下界我们不用管,但是注意到 $y < 2\min(x, y)$ 对我们十分关键,这说明 $y$ 不会很大,有上界 $2x$,直接枚举即可。 # Hard Version Solution 给定 $x,m$,求有多少 $y$ 满足 $y \in [1,m]$ 且 $x \oplus y$ 是 $x$ 或 $y$ 的倍数。 考虑分别计算 $x \oplus y$ 是 $x$ 的倍数,$x \oplus y$ 是 $y$ 的倍数,最后再想办法减去重复计算的部分。 ### 情况 1:$x \oplus y$ 是 $x$ 的倍数 $x \oplus y=kx \Rightarrow |x - y| \le kx\le x+y(k\ge2)$ 结合 $y \in[1,m]$ 得到 $k\le \lfloor \frac{m+x}{x} \rfloor$。 同理可得 $k\le \lfloor \frac{m-x}{x} \rfloor$,$k$ 只有 $O(1)$ 个,枚举即可。 ### 情况 2:$x \oplus y$ 是 $y$ 的倍数 $x \oplus y=ky \Rightarrow ky\le x+y(k\ge2)$ 得到 $(k-1)y \le x$。 $y$ 有上界 $x$,枚举即可。 ### 情况 3:$x \oplus y$ 既是 $x$ 的倍数也是 $y$ 的倍数 情况 3 是被情况 1、2 包含的,且为处理前两个情况我们枚举了所有满足约束的 $(x,y)$,所以可以在处理情况 1 时或处理情况 2 时同时处理情况 3。 # 总结 位运算可以计算上下界,熟练掌握后可以像四则运算一样推导。此外猜测 **答案 / 某枚举量** 比较小也是 guessforces 老生常谈的思路之一。