Day 164-Q1 — 2026-10-02 | Lasker's Nim(山を取り除く/2 つに分ける。Grundy 数は 4 つ組の中で 3 と 4 番目が入れ替わる)

2026-10-02 赤色 Master (Phase 8+) ★★★★★★★★★ ゲーム理論(焦点帯 M1)。Sprague–Grundy の和の定理で「山ごと」に切り離せるのは、1 手が 1 つの山しか触らないから。山を 2 つに分ける手があっても、2 つの山の Grundy 数の XOR で 1 つの値になるので同じ枠に入る。単山の Grundy 数を表で求めて規則を見つける型

問題

石の山が $N$ 個あり、$i$ 番目の山には $a_i$ 個の石がある。先手・後手が交互に、次のどちらかの操作を 1 回行う。

  • (取る) 1 つの山を選び、1 個以上の石を取り除く(山が空になってもよい)
  • (分ける) 1 つの山を選び、それを 2 つの 空でない 山に分ける(石の総数は変わらない)

操作できなくなった(石が 1 個も無い)方が負け。両者が最善を尽くすとき、先手が勝つなら First、後手が勝つなら Second を出力せよ。

入力形式

N
a_1 a_2 ... a_N

制約

#条件
1$1\le N\le 2\times10^5$
2$1\le a_i\le 10^{18}$
3入力はすべて整数

入出力例

入力例1

3
1 2 3

出力例1

First

(通常の Nim なら $1\oplus2\oplus3=0$ で後手の勝ち。ここでは 3 の山を「1 つ取り除いて 2」にしたり「1 と 2 に分けて」にできるので事情が違う)

入力例2

2
3 4

出力例2

First

(4 の山から 1 個取って $(3,3)$ にすれば、後手が何をしても先手が同じ操作を返せる)

入力例3

2
5 5

出力例3

Second

背景と出典

「取る」に加えて「分ける」を許す Nim は Lasker's Nim と呼ばれる。私の記憶では Winning Ways(Berlekamp–Conway–Guy)にあり、考案者は世界チャンピオンのエマヌエル・ラスカーとされるが、本セッションでは文献を開いておらず、帰属は未確認。正しさの根拠は下の検証ログ(単山の mex 表との照合と、全状態の全探索との照合)で、証明は本ファイルでは示していない。

Sprague–Grundy の定理(独立な部分ゲームの和は、各 Grundy 数の XOR が 0 のとき後手必勝)は標準的な結果。この問題の価値は、定理を使う前の「単山の Grundy 数 $g(n)$ を実際に表にして規則を見つける」という手作業にある。

概念図

単山の Grundy 数 g(n):4 個ずつの組の 3 番目と 4 番目だけが入れ替わる(通常の Nim は g(n)=n) 0 n=0 1 n=1 2 n=2 4 n=3 3 n=4 5 n=5 6 n=6 8 n=7 7 n=8 9 n=9 10 n=10 12 n=11 11 n=12 赤 = n と値が違う(n=3→4, 4→3, 7→8, 8→7, 11→12, 12→11) 緑 = n と同じ値(n=0,1,2,5,6,9,10) n=3 の行き先: 0,1,2(取る)と 1⊕2=3(1+2 に分ける)→ mex = 4 n=4 の行き先: 0,1,2,4(取る)と 1⊕4=5, 2⊕2=0(分ける)→ 3 だけ欠ける → mex = 3 全山の g を XOR して 0 なら後手必勝(Sprague–Grundy)

ヒント(クリックで段階的に開示)

ヒント1(方向性)

山は互いに独立で、1 手は 1 つの山にしか触らない。単山 1 個の Grundy 数 $g(n)$ が分かれば、全体は $g(a_1)\oplus\cdots\oplus g(a_N)$ が 0 かどうかで決まる。「分ける」手の行き先は 2 つの山の和ゲームなので、その Grundy 数は $g(p)\oplus g(n-p)$。

ヒント2(アプローチ)

$g(n)=\operatorname{mex}\bigl(\{g(m): 0\le m<n\}\cup\{g(p)\oplus g(n-p): 1\le p\le n/2\}\bigr)$ を $n\le 20$ ほどまで手元のコードで表にする。通常の Nim なら $g(n)=n$ になるはずなのに、ある $n$ だけずれる。

ヒント3(誘導)

$g(0..12)=0,1,2,4,3,5,6,8,7,9,10,12,11$。$n\bmod4$ で見ると、$n\bmod 4=3$ のとき $n+1$、$n\bmod4=0$($n>0$)のとき $n-1$、それ以外は $n$。あとは XOR を取るだけ。

模範解答 (Python)

模範解答を表示する(まず自力で解いてから)
import sys


def main():
    data = sys.stdin.buffer.read().split()
    n = int(data[0])
    x = 0
    for i in range(n):
        a = int(data[1 + i])
        r = a & 3
        if r == 3:
            g = a + 1          # 4k+3 -> 4k+4
        elif r == 0 and a > 0:
            g = a - 1          # 4k+4 -> 4k+3(a>0 の 4 の倍数)
        else:
            g = a              # 4k+1, 4k+2 はそのまま
        x ^= g
    print("First" if x else "Second")


main()

計算量: $O(N)$。実測(Python 3.14.7、M1 Mac)で $N=2\times10^5$、$a_i\le10^{18}$ のランダム入力が 0.07 s(起動込み)。

Step-by-Step 解説

1「分ける」手も和ゲームの形に収まる

山 $n$ から「$p$ と $n-p$ に分ける」と、盤面は「山 $p$」と「山 $n-p$」の 2 つの独立ゲームの和になる。和の Grundy 数は XOR なので、1 手の行き先の Grundy 数は $g(p)\oplus g(n-p)$。したがって単山の定義は上のヒント2の mex で閉じる。全体の盤面は各山の $g$ の XOR で決まる(Sprague–Grundy)。

2表を作ると 3 と 4 が入れ替わる

$g(1)=1,\ g(2)=2$ まではそのまま。$n=3$ では行き先に $g(0),g(1),g(2)=0,1,2$ と分割 $(1,2)$ の $1\oplus2=3$ があるので mex は 4。$n=4$ では行き先に $0,1,2,4$($g(3)=4$)と分割 $(1,3)$ の $1\oplus4=5$、$(2,2)$ の $0$ があり、$3$ だけ欠けているので $g(4)=3$。以降 4 個ずつ同じ形で、$g(4k+3)=4k+4,\ g(4k+4)=4k+3$。**$g$ は自然数の置換**になる(ずれるのは隣り合う 2 値の入れ替えだけ)。

3規則は実測で確認、証明は未了

$n\le3000$ のすべてで mex を実際に計算した表と上の式が一致した(実測)。さらに石の総数 14 以下の全 507 状態(山の多重集合)を状態の全探索(山を取る・分ける全手の再帰)で解き、$g$ の XOR による判定と全件一致した(実測)。ただし $n>3000$ の規則は この実測からの外挿で、帰納法の証明は本ファイルに書いていない。

4通常の Nim と何が違うか

通常の Nim の判定 $\bigoplus a_i$ だと 507 状態中 37 状態で誤る(実測)。3 と 4 の入替を忘れて「$4k+3\to4k+4$」だけ直すと 23 状態で誤る(実測。$4k+4$ 側を直し忘れると、入力例 2 の $(3,4)$ が $4\oplus4=0$ で Second になる)。

迷った他案と採らなかった理由

案計算量採否理由
山の多重集合に対する状態の全探索指数検算用のみ総数 14 まででも全 507 状態。$N=2\times10^5$ には不可
通常 Nim の XOR$O(N)$不採用「分ける」手を無視している。507 状態中 37 状態で誤答
山ごとに mex の表を作る$O(a^2)$ / 山規則の発見用のみ$a\le10^{18}$ には不可。ただし規則を見つける手段としては必要
$g(n)$ の閉形式(本解)$O(1)$ / 山採用表の全 3001 値・全 507 状態と一致。証明は未了

前提が変わったら:

  • 「分ける」を 3 つ以上に許すと別のゲーム。単山の mex を再計算して規則を探し直す(本解の式は使えない)
  • 「分ける」だけで「取る」が無い(Grundy's game 系)は規則が周期的でなく、既知の Grundy 数の列が不規則に見える。本問のように閉形式には落ちない
  • 勝ち手を出力させるなら、山 $i$ の目標値 $t=g(a_i)\oplus X$ に対し、取る手は $g^{-1}(t)<a_i$ なら 1 手。分ける手の探索は $O(a_i)$ になるので、$a_i$ が大きいときは別の工夫が要る(本問では扱わない)

よくあるミス

ミス原因正しい書き方
通常 Nim の XOR で判定する「分ける」手の存在を落とす$g$ に変換してから XOR(37/507 状態で誤答)
$4k+3$ だけ $+1$ にして $4k+4$ を直さない入れ替えが 2 つ組であることを見落とす$a\bmod4=0$($a>0$)なら $a-1$(23/507 状態で誤答)
$a=0$ に $-1$ を適用する「4 の倍数」に 0 を含めてしまうr == 0 and a > 0(本問は $a_i\ge1$ だが、拡張時に効く)
規則を表で確かめず公式だけ暗記する出典を開かずに「Lasker's Nim は $n\bmod4$」と覚える$n\le20$ を自分で表にして、式がその表と合うかを見る

次のステップ

  • 発展1: 「取る」を 1 手で最大 $k$ 個に制限した版(Lasker 型と Moore 型の合成)の $g(n)$ を表で調べる
  • 発展2: $g(4k+3)=4k+4,\ g(4k+4)=4k+3$ を帰納法で証明する(鍵は「$g(p)\oplus g(q)$ が $p+q=n$ のとき自分自身 $g(n)$ にならない」こと。奇偶と下位 2 ビットで場合分けする)
  • 次回予告: 焦点帯 M1 の別のゲーム、または DP の高速化

検証ログ(本セッションで実行した数値)

  • 単山の mex 表との照合(実測): 「取る」「分ける」の全手から mex を計算した $g(0..3000)$ と式が全 3001 値で一致(不一致 0)
  • 全状態の全探索との照合(実測): 石の総数 1〜14 の山の多重集合 507 状態を再帰で解き、$g$ の XOR 判定と全件一致。後手必勝は 61 状態。プログラム全体(標準入力経由)は 507 状態から無作為に取った 300 状態で全件一致
  • 誤った方法(実測): 通常 Nim の XOR 37/507、$4k+3$ だけ直す 23/507 で誤答
  • 入力例(実測): 例 1 First、例 2 First、例 3 Second
  • 実行時間(実測): $N=2\times10^5$、$a_i\le10^{18}$ で 0.07 s
  • 扱っていない範囲: $n>3000$ の規則の証明、勝ち手の出力、「分ける」を 3 つ以上にした版、Lasker・Winning Ways の原典確認

自己評価

自分の回答

気づき・メモ