L 字形は、ある列の両方のマスと、その隣の列の マスを取る。したがって必ず空の列ができ、左右は互いに影響しない独立したゲームになる。
空の列で区切った各区間では、端の列だけが マスになり得て、内部の列には常に マスが残る。この性質はどの手の後にも保たれる。
区間の残りマス数を とする。どの手も、大きさが と の二つの区間を残す。逆に、 のすべての分割が可能である。マスを左の列から順に並べると、連続する マスは必ず一つの列の マスと隣の列の マスになる。先頭の マスの直後の マスを取ればよい。他の向きで取っても、新しい大きさの組は生じない。
よってグランディ数はマス数だけで決まる。これを とすると、
であり、 について
となる。 は集合に含まれない最小の非負整数、 はビット XOR である。
最初は マスの区間が一つある。 なら YES、そうでなければ NO を出力する。
入力中の の最大値を とする。 までの前計算は 時間、 空間で行える。その後は各ケースを 時間で処理でき、全体の時間計算量は 、入力を含む空間計算量は である。
サブタスク 1 は である。 マスの状態をビットマスクで表し、合法な L をすべて試すメモ化探索を行う。同じ の答えを再利用すれば、 に対し時間は 、空間は 以下となる。サブタスク 2 では上記のグランディ数を使う。
Solution written by GPT