【训练题72:博弈变种】Marbles | Gym101908B (1024节快乐!)

【训练题72:博弈变种】Marbles | Gym101908B (1024节快乐!)

题意

  • Marbles | Gym101908B
    棋盘上有 n n n 个石头,第 i i i 个石头的初始位置为 ( x i , y i ) (x_i,y_i) (xi,yi)
    双方轮流操作,每一次选择一个石头并移动它的位置
    若这个石头一开始的位置为 ( l , r ) (l,r) (l,r),则它可以被移动到如下位置:
    ( l − u , r ) (l-u,r) (lu,r)
    ( l , r − u ) (l,r-u) (l,ru)
    ( l − u , r − u ) (l-u,r-u) (lu,ru)
    前提是移动完之后横纵坐标都非负。
  • 若有人把某个石头移动到 ( 0 , 0 ) (0,0) (0,0),他就赢了
    问先手必胜情况
  • 1 ≤ n ≤ 1000 1\le n\le 1000 1n1000
    1 ≤ x i , y i ≤ 100 1\le x_i,y_i\le 100 1xi,yi100

思路

  • 首先,每个石头相当于一个独立游戏。
    更具体的,每个独立游戏相当于一个威佐夫博弈。
    在这里插入图片描述
  • 当然我们这里需要算出这个游戏的 S G SG SG 的具体的值。
    然后测试了一下,发现不大行。为什么呢?
    因为一般的博弈是,操作不了的人输,即每个独立游戏都无法操作了,他就输了。
    但这里,如果玩家对于某个独立游戏赢了,他就直接赢了。所以我们不能简单转移 S G SG SG
  • 考虑到,如果某个石头的坐标为 ( p , p ) (p,p) (p,p),那么先手直接把这个石头拿到 ( 0 , 0 ) (0,0) (0,0),不管其他石头怎么样,先手都是必胜的。这感觉和 S G SG SG 的异或值就扯不上关系了,所以我们单独定义一个状态,我把它叫做
    神圣态
  • 我们看一下,哪些位置是是直接先手必胜的?
    显然,为 ( p , p ) 、 ( 0 , p ) 、 ( p , 0 ) 、 ( 0 , 0 ) (p,p)、(0,p)、(p,0)、(0,0) (p,p)(0,p)(p,0)(0,0) ,这些位置直接必胜,我们不考虑他们位置的 S G SG SG 值。
    对于其他平凡位置 ( x , y ) (x,y) (x,y),它的 S G SG SG 即为:
    S G ( x , y ) = M e x ( x , y ) 能转移到 ( p , q ) 且 ( p , q ) 不为神圣态 { S G ( p , q ) } SG(x,y)=\underset{(x,y)能转移到 (p,q)且(p,q)不为神圣态}{Mex}\{SG(p,q)\} SG(x,y)=(x,y)能转移到(p,q)(p,q)不为神圣态Mex{ SG(p,q)}
  • 若没有神圣态,那么根据所有石头的 S G SG SG 的异或值来判断先手是否必胜。

代码

  • 时间复杂度: O ( N + 10 0 2 ) O(N+100^2) O(N+1002)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45775438/article/details/127500421