1 条题解
-
0
题意理解
我们有 枚硬币,编号 ,初始状态给定(0 反面朝上,1 正面朝上)。
操作规则:
- 必须选一个当前反面朝上的硬币 。
- 将 写成 ,其中 与 互质。
- 有两种操作类型:
- 类型 1(对 操作):选择 ,且 ,翻转所有编号为 的硬币,。
- 类型 2(对 操作):选择 ,且 ,翻转所有编号为 的硬币,。
游戏结束:当无法操作时(没有反面朝上的硬币可选),当前玩家输。
关键观察
-
硬币独立性
注意到 中, 是与 互质的数,不同的 之间是独立的,因为操作只改变 不改变 。
所以游戏可以按 分解成若干独立子游戏,每个 对应一个 的二维棋盘。 -
状态表示
对于固定的 ,所有可能的 构成一个二维矩阵( 为行, 为列)。
每个位置 表示硬币 是否存在(编号 ),以及它的初始状态。 -
操作的含义
- 类型 1:在 处,选择一个 满足 ,翻转 共 个位置(),即一列上等间距的若干硬币。
- 类型 2:在 处,选择一个 满足 ,翻转 共 个位置(),即一行上等间距的若干硬币。
操作只能在反面朝上的 位置发起。
-
等价于翻棋子游戏
这是一个典型的组合博弈问题,每个 位置如果是反面朝上,就可以发起操作,操作会翻转该行或该列上的一些位置(包括自己)。
由于翻转两次等于没翻,这实际上是在 (异或)上的游戏。
SG 定理应用
整个游戏是多个独立子游戏(每个 )的直和,所以总 SG 值是所有 对应 SG 值的异或和。
对于固定的 ,我们考虑它的 矩阵,矩阵大小有限(因为 )。
设 表示在 这个位置是反面朝上时,只考虑这个位置及其能影响的位置构成的子游戏的 SG 值。
但这里不能直接这样定义,因为操作影响多个位置。实际上,这是一个有向图游戏(Impartial Game),状态是整个矩阵的 0/1 反面状态,但状态数太大。
关键简化
注意到:
- 操作总是从某个 出发,沿着 递减或 递减的方向影响一串位置。
- 每次操作翻转的是一串位置,相当于改变这些位置的反面/正面状态。
- 在组合博弈中,这种“翻转多个位置”的游戏,如果每次操作必须包含某个特定位置(这里是初始的反面位置),并且操作集合与状态独立,那么可以建模为 Nim 类游戏。
事实上,这个游戏是 Moore’s Nim 的一个二维推广,但这里 是变化的。
已知结论
这个游戏在 2012 年左右的 ACM 竞赛中出现过类似题(基于 2,3 的因子分解 + 翻硬币)。
其结论是:- 每个 对应一个二维棋盘,可以按 计算它的 Grundy 数。
- 由于操作是线性的(在 上),可以用 nimber 计算。
- 最后发现,每个 的 SG 值只与 有关,与 无关,并且满足:
初始 需要单独考虑(没有操作,SG=0)。
- 对于初始状态,如果硬币 是正面朝上,则它不参与 SG 异或;如果是反面朝上,则它的 Grundy 值 参与总异或。
所以总 SG = $\bigoplus_{c} \bigoplus_{a,b\ \text{s.t. coin state=0}} \text{SG}(a,b)$。
若总 SG ≠ 0,Alice 胜,否则 Bob 胜。
算法步骤
- 预处理 对于 在一定范围内的值(因为 ,所以 ,,矩阵很小)。
- 对每个测试数据:
- 初始化总异或和 = 0。
- 对每个硬币 ,分解 ,找到 。
- 如果硬币初始状态为 0(反面朝上),则总异或和 ^= 。
- 若总异或和 ≠ 0,输出 "win",否则 "lose"。
时间复杂度
- 预处理 SG 表:,其中 ,很小。
- 处理每组数据: 分解质因数(只需除 2,3)。
- 1
信息
- ID
- 4500
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者