CF1149E
from ANIG
问题看上去完全想不到直接的做法,考虑弱化问题。
现在来分析 \(n\) 个点的链的情况。
如果 \(n=2\),先手必胜;
如果 \(n=3\),考虑手玩一些简单的情况,不难观察到 \(\text{x0x}\) 类型的状态先手必败,其余先手必胜,严格证明可以考虑归纳;
如果 \(n=4\),发现已经很复杂了,什么都手玩不出来,考虑写暴力打表猜测充要条件。
我们能想象到这样一个暴力:
对于每个状态,枚举操作哪个位置,然后设定一个阈值,枚举把这个位置变成多少,并在阈值范围内枚举链上下一个数是多少。
但这个暴力不一定是对的,原因在于:一个状态可能转移到数值很大的状态,这时可能要求阈值更大才能得到正确结果。
事实上,我们在解决这道题之后可以证明,阈值范围取 \([0,2^k-1]\) 并且初始输入的值不超过阈值时这个暴力时对的。
所以目前这个暴力跑出的结果不能全信。
不过把阈值范围设到 \([0,1]\) 还是能看出一点点规律的:
1001 先手必胜,1010 先手必败,1011 先手必胜,1100 先手必胜,1101 先手必胜,1110 先手必胜,1111 先手必败。
虽然没有理由相信上面的表是对的,但结合 \(n=3\) 的结论,又由于本题如果全部点是孤立的就是经典的 \(\text{nim}\) 博弈,所以可以做出猜测:
奇数位置的 \(\text{xorsum}\) 和偶数位置的 \(\text{xorsum}\) 都是 \(0\) 是链先手必败的充要条件。
可以证明这点:
先考虑必败态一定只能走到必胜态:操作一个位置一定会改变其所在组的 \(\text{xorsum}\),会变为非 \(0\),故不能走到必败态,所以只能走到必胜态;
再考虑必胜态可以走到必败态:假设当前操作位置所在组 \(\text{xorsum}\) 非 \(0\),那么根据 \(\text{nim}\) 博弈的证明,一定能找到一个数,可以把它变小并使整组的 \(\text{xorsum}=0\),接着可以任意改变另一组的 \(\text{xorsum}\),就能达到必败态。如果操作的数在链的边界上可能还要做一些讨论,比较平凡,在此略过。
下面来尝试把这个分组计算 \(\text{xorsum}\) 的结论放到 \(\text{DAG}\) 上。
如果用类似黑白染色的办法分组,只能解决二分图,所以可以考虑分更多的组。
整合一下我们的要求:
- 为满足必败态一定只能走到必胜态,同组能的点不能有连边。
- 为满足必胜态能走到必败态,一个充分条件,每个点要向其它组各至少一个点连边。
似乎要求太难达到了,尝试给第二个条件放宽:
- 每个点要向编号大于其所在组的组中至少一个点连边。
可以发现,按照逆拓扑序增量构造,一个点的组号取其出边对面点组号的 \(\text{mex}\) 即可。
这个构造满足了我们的所有要求,这道题被解决了。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号