ブログ名

競技プログラミングやお歌のお話をする高菜です。

CADDi 2018 F - Square の 2 状態 DP による解法です。

問題へのリンク

atcoder.jp

解法

5 重対角成分のみ考えればよいというところまで、公式解説と同じです。公式解説では(例示にすぎませんが)5 マス分の状態を管理するとよいとありましたが、私は 1 マス分で解けましたので共有させていただこうかとです。

ケンケンパ

まず、そのまま取り出すと最初と最後だけ 2 マスずつ足りませんから、適宜調整して 3, 2, 3, 2, 3, 2, ..., 2, 3 のようにケンケンパの形にしておきましょう。すると、下図のようになります。囲ってある青い 3 マスや赤い 4 マスに、xor 0 制約があります。

f:id:ngtkana:20210507132348p:plain
ケンパ、ケンパ、ケンケンパ

制約の言い換え

一旦、ケンケンパの「外側」の 4 行が決まっていると思いましょう。すると青い 3 マスにおいては外側 2 マスが決まっていることになりますが、これにより真ん中が確定します。

f:id:ngtkana:20210507132623p:plain
青い制約

また赤い 4 マスにおいては上下 2 マスが決まっていることになり、これにより左右が等しいか異なるかが決まります。

f:id:ngtkana:20210507133004p:plain
赤い制約

しかし実際には「外側」の 4 行は決まっていたり決まっていなかったりしますから、そこを頑張っていきましょう。

DP

青色制約と赤色制約を左から順に見ていって、左から順に、中央の行のすでに決まったマスのうち最も右にあるマスに何が書いてあるかを管理する DP をするとよいです。これは、詳しくご説明しようと思うと大変ですから、例でご勘弁いただけるとです。

下記はサンプル 2 です。緑で囲った部分がケンケンパです。はみ出た部分は、( 0, None ), ( 0, None ) にしておくとよいです。

f:id:ngtkana:20210507134058p:plain
サンプル 2 をケンケンパに変換

こうしてできるサンプル 2 のケンケンパがこちらです。制約を満たすように、残りのマスに 0 か 1 を埋めて行きましょう!

f:id:ngtkana:20210507134148p:plain
サンプル 2 のケンケンパ

このような遷移グラフになり、五重対角成分に限った答えは 0 + 16 = 16、ここに非五重対角成分の埋め方 2 通りをかけるとよいです。

f:id:ngtkana:20210507134233p:plain
サンプル 2 の遷移グラフ

提出へのリンク

Submission #22360634 - CADDi 2018