0%

CF-1073-C. Sorting Game(考虑和终态不一样的点)

题目大意

Alice 和 Bob 在长度为 n 的二进制字符串 s(仅包含字符 0 和 1)上进行博弈游戏。Alice 先手,双方轮流操作。

游戏规则:

  • 每回合,玩家选择一个索引序列 i₁, i₂, …, iₘ(严格递增),使得这些位置的字符形成非增序列(s[i₁] ≥ s[i₂] ≥ … ≥ s[iₘ])

  • 然后将这些位置的字符重新排列为非减序列(先放所有 0,再放所有 1)

  • 有效移动必须严格改变字符串(即选中的字符中至少有一个 0 和一个 1)

  • 无法进行有效移动的玩家输掉游戏

任务:

  • 假设双方都采用最优策略,判断谁会获胜

  • 如果 Alice 获胜,输出她的一个获胜首步移动(索引序列)

输入格式:

  • 多组测试数据,第一行包含测试数据组数 t(1 ≤ t ≤ 10⁴)

  • 每组数据:第一行为字符串长度 n(1 ≤ n ≤ 2×10⁵),第二行为二进制字符串 s

  • 保证所有测试用例的 n 之和不超过 2×10⁵

输出格式:

  • 如果 Bob 获胜,输出 “Bob”

  • 如果 Alice 获胜,输出三行:第一行 “Alice”,第二行整数 m(选中的索引数量),第三行 m 个递增的索引

样例说明:

  • 样例 1(000):字符串已经有序,无法进行任何有效移动,Bob 直接获胜

  • 样例 3(10):Alice 可以选择位置 [1,2],将字符串变为 01,之后 Bob 无法移动,Alice 获胜

思路讲解

其实我们会发现,只需要一次操作即可解决这个问题

AC代码

AC

https://codeforces.com/contest/2191/submission/358351618

心路历程(WA,TLE,MLE……)