模拟赛好题分享 博弈
题目大意
有 \(n\) 堆石子,每次可以从一堆中取最多 \(x\) 个石子,不能操作者负。
对于每个 \(x\),求出先手还是后手必胜。
Sol
考试上用 \(SG\) 大力推出,\(f_x=(\bigoplus_{i=1}^n(a_i \bmod x))\ne 0\),为先手必胜的充要条件。
那么如何求呢,然后降智了。
考虑按每一位考虑,对于 \(x\),\([kx,kx+x)\) 取模正好是 \([0,x)\)。
然后又 \([2^{k+1}K+2^{k},2^{k+1}K+2^{k+1})\) 是所有恰好第 \(k\) 位为 \(1\) 的值。
把 \(a\) 压到权值上,做区间求和,做完了。
时间复杂度因为调和卡住 \(O(n\log^2n)\)。
反思
由于异或和取模的搭配实在是有点诡异,没有往按位处理上去想。

浙公网安备 33010602011771号