[ARC133D] Range XOR 题解
牛逼逼题。
我们先考虑没有 \(l\le r\) 的限制的情况,先做个前缀和,即 \(s_i=\displaystyle\oplus_{i=0}^ni\),那么要统计的东西就变成了:
\[\sum_{l=L-1}^{R-1}\sum_{r=L}^R[s_l\oplus s_r=v]
\]
但我们会发现这玩意没有对称性,很蛋疼,于是考虑强行把区间拉平得到
\[\sum_{l=L-1}^{R}\sum_{r=L-1}^R[s_l\oplus s_r=v]
\]
考虑这玩意多算了那些东西,可以发现,我们多算的部分是 \(l=r\) 的部分(对应到一开始的式子不是合法情况),去掉这一部分后,我们会发现我们会同时统计 \((l,r)\) 与 \((r,l)\),因此再除以 \(2\) 就得到了我们要的东西。
考虑做个前缀和,设
\[S(n,m)=\sum_{l=0}^n\sum_{r=0}^m[s_l\oplus s_r=v]
\]
那么我们要求的东西就变成了 \(S(R,R)-2S(L-2,R)+S(L-2,L-2)\),考虑如何求 \(S(n,m)\) 即可。
考虑 \(s_i\) 的计算,可以发现如下事实:
s[------00] = 0^------00 = ------00
s[------01] = ------00^------01 = 1
s[------10] = 1^------10 = ------11
s[------11] = ------11^------11 = 0
因此,我们有:
\[s_i=\begin{cases}
i & i\equiv0\pmod 4\\
1 & i\equiv1\pmod 4\\
i+1 & i\equiv2\pmod 4\\
0 & i\equiv3\pmod 4
\end{cases}
\]
可以发现,对于 \(l\equiv 1,3\pmod 4\) 或 \(r\equiv 1,3\pmod 4\) 的情况,由于 \(s_{l/r}\) 为常量,故可以直接计算。
可以发现当确定末两位后可以直接删掉后两位,那么就没有模 \(4\) 的限制了。
对于剩下的内容,等价于求
\[\sum_{l=0}^{\lfloor n/4\rfloor}\sum_{r=0}^{\lfloor m/4\rfloor}[l\oplus r=\lfloor v/4\rfloor]
\]
而这是一个 trivial 的数位 dp,硬冲就完了。
时间复杂度 \(O(\log n)\)

浙公网安备 33010602011771号