题解:可修改环上的边权游戏¶
出题人数据结构:按隐式下标维护序列的伸展树与区间最小值。Codex(GPT-6)修正胜负判据,给出完整策略证明,补齐短环规则,并维护最小值首次和末次出现的位置,使每次编辑后的判定为常数时间。
胜负只需要哪些信息¶
空环必败。对于非空边权序列,记最小值为 \(\mu\) ,从起点顺时针走到第一条最小值边之前的边数为 \(L\) ,逆时针的对应边数为 \(R\) .它们是最小值首次出现前、末次出现后的元素数量。
- 若所有边均为正且 \(n\) 为奇数,先手必胜。
- 其余情况,先手必胜当且仅当 \(L,R\) 至少一个为奇数。
权值可以任意减小,不能只分析每次减一的玩法。下面直接证明每个必胜状态有一步能走到必败状态,而每个必败状态的所有走法都到必胜状态。
已有零权边¶
零边不可走,棋子可活动的部分是一条路径。左右两侧离边界分别有 \(L,R\) 条正权边。
若一侧长度为奇数,沿该侧第一条边移动并清零。对手的一侧立即被堵住,另一侧剩偶数条边,成为两侧均为偶数的状态。
若两侧都是偶数,任意合法移动沿某个正的偶数长度方向前进一步。前方剩余长度变成奇数。若把刚走过的边清零,后方长度为零;若仍保留正权,后方长度增加一,也变为奇数。因此对手必然获得至少一侧为奇数的状态。路径长度全零时确实没有合法移动,作为终止情形与判据一致。
所有边均为正¶
若 \(n\) 为奇数,任选一条相邻边移动并清零。对手得到一条长为 \(n-1\) 的偶数路径,位于端点;由上一节它必败。
以下令 \(n\) 为偶数。若 \(L\) 为奇数,则起点顺时针第一条边严格大于 \(\mu\) .沿它移动,并把它减为 \(\mu\) .新位置顺时针第一条最小边前有 \(L-1\) 条边,逆时针紧邻刚走过的最小边;两个数量均为偶数。\(R\) 为奇数时对称操作。
反之,假设 \(L,R\) 均为偶数。考虑顺时针移动,减权后的值为 \(v\) :
- 若 \(v<\mu\) ,这条刚走过的边成为唯一最小边。它位于新位置的逆时针相邻处,顺时针则要先经过 \(n-1\) 条边,为奇数。\(v=0\) 时同样由路径判据得到必胜。
- 若 \(v\ge\mu\) ,被走过的边此前不是最小边,所以 \(L>0\) .之前顺时针第一条最小边仍在前方,到它之前只剩 \(L-1\) 条边,为奇数。
逆时针移动完全对称。因此从两个偶数的状态不能走到另一个必败状态。结合边权总和严格下降,上述策略证明了判据。
一条正权自环可直接清零,所以必胜。两条平行边套用判据,结果是权值相等时必败,否则必胜,与两个堆的直接博弈一致。
隐式伸展树¶
按边的当前顺序维护伸展树。每个辅助子树保存节点数、最小值、最小值在其中首次和末次出现的下标。由左右子树与根合并这些量,旋转时局部更新即可。
加入两个权值为101的哨兵,分别置于序列两端;所有合法边权至多100,所以非空时哨兵不会影响最小值。按秩找到编辑位置,利用伸展操作执行赋值、插入或删除。插入和删除可先把区间左右边界伸展到根与其右孩子,将待编辑区间隔离出来。
根处记录的位置包含左哨兵:若首次最小值下标为 \(f\) 、末次为 \(l\) ,两者均从零开始,则 \(L=f-1\) 、\(R=n-l\) .因此查询判据耗时 \(O(1)\) .
建树 \(O(n)\) ,每次编辑摊还 \(O(\log(n+q+1))\) ,总时间 \(O(n+q\log(n+q+1))\) .节点池不回收删除节点,空间为 \(O(n+q)\) .建树递归深度为对数,在线旋转与查秩均为迭代。
两个错误判据的反例¶
仅在最小值为0或1时分析位置、其余情况只看环长奇偶,会误判边权 \((2,2,2,3)\) .先手沿权值3的边将其减为2,留给对手全部为2的偶数环,因此先手必胜。
零权情形也必须检查两侧的奇偶性。例如 \((0,1,1,1)\) 的逆时针可行路径长为3,先手必胜;仅检查某一侧位置是否为零并不能替代奇偶性。
所以首选仍使用伸展树的数据结构思路,但胜负计算采用上述已证明的完整判据。验证包含权值0至3、长度0至6的全部5461个状态的逐步博弈穷举,以及插入、删除和修改的独立序列模型。见标准程序、测试说明及性能记录。