SRM789 Hard

题意

\(n\) 堆石子,每堆 \(a_i\) 个,两人轮流取,不能行动者输。

有一个集合 \(S\),如果一个人取了 \(x\in S\),那另一个人下一次必须在同一堆石子行动。

\(n\le10^5,a_i\le100\)

题解

不知道这个限制在干啥怎么办呢?我们取某些石子,让对方可以不遵守限制,如果这个时候能赢,那一定就赢了。

否则得取一个 \(x\in S\),给对方限制。假设对方下一步取了 \(y\not\in S\),此时我们可以任意操作。则这个状态一定是先手必胜的。

于是对方必须取 \(y\in S\),我们也仍然选择一个 \(x'\in S\),直到某方无法操作。

当双方轮流拿 \(x\in S\) 时,先手必胜,则称该堆石子是好的。

如果有一堆是好的,先手已经赢了,否则考虑第一种大情况:忽略 \(x\in S\) 造成的限制,让对方随便取。还需要保证每堆石子都不是好的。

对方也只能这样做。把每堆石子的 SG 值异或起来即可。

posted @ 2023-02-22 22:10  shrtcl  阅读(37)  评论(0编辑  收藏  举报