Skip to content

博弈论

mex运算

定义mex运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。

可以用bitset来计算mex的值:

cpp
int mex(bitset<N> b)
{
    int i = 0;
    while(b[i++]);
    return i - 1;
}

SG函数

当先手 时,则先手在 状态时必败

例:取石子问题

有一堆n个的石子,两个人轮流取石子,每次只能取1、3、4个石子,先取完石子者胜利,两个人都足够聪明,求先手是否必赢。

为0-5时,sg函数的值如下:






时,先手必败; 时必胜。

石子数为1-5的后继关系如下图所示

SG定理

若一个游戏可以拆分成多个游戏,则该游戏的胜负取决于每个游戏的sg函数值的异或和。
即对于任意游戏

表示异或