模拟赛好题分享 博弈

题目大意

\(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)\)

反思

由于异或和取模的搭配实在是有点诡异,没有往按位处理上去想。

posted @ 2024-10-22 20:18  yanglinyu  阅读(18)  评论(0)    收藏  举报