Codeforces 排序游戏解题指南 | AI生成和翻译

Home 2026.01

Question: 如何解决 Codeforces 题目 “Sorting Game”?在该题目中,Alice 和 Bob 轮流将 binary string 的 non-increasing subsequence 重新排列为 non-decreasing order。

Answer:

Problem Analysis

游戏在长度为 $n$ 的 binary string 上进行。

  1. Valid Move:玩家选择一个 non-increasing subsequence(例如 1, 1, 0, 0)并将其排序为 non-decreasing order(例如 0, 0, 1, 1)。该操作必须严格改变字符串。
  2. Losing Condition:无法进行有效移动的玩家输掉比赛(Normal Play Convention)。
  3. Terminal State:当且仅当字符串已经 sorted(所有的 0 都在 1 之前)时,字符串处于 terminal state(无法移动)。如果字符串已排序,任何 non-increasing subsequence 都将只包含全 0 或全 1,对其排序不会改变字符串。

Winning Strategy

如果 Alice 能够在一步移动中将字符串转变为排序状态,她就赢了。因为游戏在玩家面对已排序字符串时立即结束,如果 Alice 在她的第一回合就能完成排序,Bob 将立即输掉。

Alice 总能一步完成排序吗? 是的,只要字符串尚未排序。为此,Alice 需要识别出与最终排序版本相比,所有“位置不对”的字符。

  1. 设 $z$ 为字符串 $s$ 中 0 的总数。
  2. 在长度为 $n$ 且包含 $z$ 个 0 的已排序字符串中,前 $z$ 个字符必须是 0,其余 $n-z$ 个字符必须是 1
  3. Alice 可以选择当前字符不正确的索引集合 $I$:
  1. Validity Check

Algorithm

  1. 统计字符串中 0 的总数 ($z$)。
  2. 检查字符串是否已经排序(即从索引 $1$ 到 $z$ 的所有字符是否都是 '0')。
  3. 如果字符串已经排序,输出 Bob
  4. 否则,输出 Alice
  5. 提供移动方案:

Complexity

References:


Back Donate