【数学】SG函数

取石子游戏,每次移动可以取 \(1,2,k\) 个石子,无法移动则输。

int k;
int sg[1005];

int SG(int x) {
    if(sg[x] != -1)
        return sg[x];
    int res = 0;
    if(x >= 1)
        res |= 1 << SG(x - 1);
    if(x >= 2)
        res |= 1 << SG(x - 2);
    if(x >= k)
        res |= 1 << SG(x - k);
    int i = 0;
    while(res & 1) {
        res >>= 1;
        ++i;
    }
    return sg[x] = i;
}
上一篇:CodeGo.net>在NUnit测试上使用moq模拟HttpContext.Current


下一篇:学习笔记 无向图删边游戏