🍕🏠🌋 当前时间是:

 

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}\) 即可。

这个构造满足了我们的所有要求,这道题被解决了。

posted @ 2025-09-08 11:03  zzafanti  阅读(12)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end