P6429 [COCI2008-2009#1] JEZ 题解

发布时间 2023-08-19 09:11:30作者: TimelessWelkin

题目传送门:Click

某蒟蒻看见这道题,想了足足一个晚上,过后茅塞顿开,故作此篇。感谢神犇的题解

看题目数据范围:\(1 \leq r,c \leq 10^6,1 \leq k \leq 10^{12}\),显然打暴力 \(\mathcal{O}(rc)\) 的时间复杂度是行不通的。必须做到近似于 \(mathcal{O}(r)\) 的时间复杂度。

观察题目:题目中说:当 \(x+y=x \oplus y\) 时,这个格子是灰色的。而最后所求的答案就是走过的灰色的格子数,很容易想到斜着划分所有的格子,每一组的格子中的任意一个格子 \((x,y)\) 都满足 \(x+y=S\),其中 \(S\) 是不变的。如下图:(图可能有点丑,仅做示意)

接下来,我们针对某个特定的 \(S\) 进行考虑。设有一组 \((x,y)\),那么 \(x \oplus y=S\) 必然满足:\(S\) 二进制上的第 \(x\) 位为 \(1\),则 \(x\)\(y\) 的二进制第 \(x\) 位上必然不同;而当 \(S\) 二进制上的第 \(x\) 位为 \(0\),那么 \(x\)\(y\) 二进制第 \(x\) 位上必然相同。

再来考虑加法。首先看 \(S\) 二进制位的最后一个 \(1\),发现它有两种情况,通过后两位进位,或是由 \(x,y\) 中一个 \(0\) 一个 \(1\) 相加而成。

当它是通过后两位进位而成时,则 \(x,y\) 该位上相同则无法满足异或;不同,则无法满足相加(因为有进位)。(见下图 1)

而它是由更前面的某一位 \(0\) 对应的 \(x,y\) 中的 \(1\),也无法满足要求。(见下图 2)

综上,在 \(S\) 的每一位 \(0\) 上,\(x\)\(y\) 同为 \(0\) ;否则,\(x,y\) 有且仅有一个 \(1\)