题解:CF1906G Grid Game 2
把每个初始黑格 \((r,c)\) 视作独立子局 \(G_{r,c}\)。因一次操作只影响以 \((r,c)\) 为右下角的左上实心矩形,任何两子局要么互不相交,要么一包含一,从而整体就是若干子局的离散和;胜负取决于所有子局的 SG 值按异或求和是否为零。可证明 \(G_{r,c}\) 的 SG 值只可能取 \(0\) 或 \(1\),且有公式:
\[g(r,c)=E(r,c)\oplus E(r-1,c)\oplus E(r,c-1)\oplus E(r-1,c-1)
\]
其中 \(E(a,b)\) 为在辗转相除求 \(\gcd(a,b)\) 过程中,把每步整除商的奇偶性做异或得到的结果。循环中维护 \(v\mathrel{\,\hat=\,}(a/b)\&1\),随后令 \((a,b)\leftarrow(b,a\bmod b)\) 即可,单次计算复杂度 \(O(\log\max(a,b))\)。读入全部黑格不断异或 \(g(r,c)\),最终异或和非零则先手赢,否则后手赢。
时间复杂度 \(O(N\log V)\),其中值域为 \(V = 10^9\)。

浙公网安备 33010602011771号