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) (l−u,r) ( l , r − u ) (l,r-u) (l,r−u) ( l − u , r − u ) (l-u,r-u) (l−u,r−u) 前提是移动完之后横纵坐标都非负。
若有人把某个石头移动到 ( 0 , 0 ) (0,0) (0,0),他就赢了 问先手必胜情况
1 ≤ n ≤ 1000 1\le n\le 1000 1≤n≤1000 1 ≤ x i , y i ≤ 100 1\le x_i,y_i\le 100 1≤xi,yi≤100
思路
首先,每个石头相当于一个独立游戏。 更具体的,每个独立游戏相当于一个威佐夫博弈。
当然我们这里需要算出这个游戏的 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)}