特に学び的なことはなかったけど,かなり面倒そうに見える問題が楽に解けたので.
問題は ↓ から.
解法
各 #
マスから上下左右 + 斜め 4 方向の合計 8 方向に存在する #
マスへ辺を張ったグラフを考えると,A, B, C はすべて連結であることに着目する.等倍の A, B, C に対応する連結成分の大きさはそれぞれ 12, 16, 11 で全て異なるので,これを使って判定することを考える.なお,制約より図形が重なることはないので 2 つ以上の文字が同じ連結成分に属することはない.
連結成分の大きさが のアルファベットを 倍拡大すると,拡大後の連結成分の大きさは となる.
従って,Union-Find や幅優先探索により各連結成分の大きさ を取得し,
を満たす , を決定する問題へと落とすことができた.
が持つ素因数 および の数に着目することで, および対応するアルファベットは次のように求められる.
- のとき: 空マス.
- が素因数 を奇数個持つとき: で,対応するアルファベットは C.
- が素因数 を奇数個持つとき: で,対応するアルファベットは A.
- 上記以外: で,対応するアルファベットは B.
以上より,幅優先探索を用いることにすれば全体 でこの問題を解くことが出来る.