警示后人
查看原帖
警示后人
1145602
dongzhenmao楼主2025/8/2 13:14

全局计算 sg 的数组 is,有可能在计算当前层时清理掉父级标记。

int dfs(int w, int h) {
    if (vis[w][h]) return sg[w][h];
    vis[w][h] = true;
    if (w == 2 && h == 2) return sg[w][h] = 0;

    for (int i = 2; i <= w - 2; ++i) is[dfs(i, h) ^ dfs(w - i, h)] = true;
    for (int i = 2; i <= h - 2; ++i) is[dfs(w, i) ^ dfs(w, h - i)] = true;

    while (is[sg[w][h]] == 1) sg[w][h]++;

    for (int i = 2; i <= w - 2; ++i) is[dfs(i, h) ^ dfs(w - i, h)] = false;
    for (int i = 2; i <= h - 2; ++i) is[dfs(w, i) ^ dfs(w, h - i)] = false;

    return sg[w][h];
}
2025/8/2 13:14
加载中...