ABC232 参加記録
コンテスト中AC:A〜E
C - Graph Isomorphism
順列全探索の問題です。
Pのあり得る組み合わせは最大で8!通りで、順列全探索で十分間に合います。
逆にNが8くらいまでなら順列全探索を疑うと良いかもしれません。
グラフは、実装の簡便さから隣接リストでなく、以下のように隣接行列で持っておいた方が良いと思います。
1ならi,jに辺がある。
高橋くんと青木くんのおもちゃが表すグラフをそれぞれとすると、おもちゃが同じ形であるための条件は、
・i < jであるすべての(i, j)の組みについて、とが等しい
となり、条件を満たすPの順列が1つでも存在すればYesとなります。
なお、に辺がなく、に辺がある場合どうなるか問題文に記載が無く、一見わかりませんでした。しかし、このような組が存在すれば、辺の数が同数であるという条件から、この逆パターンが必ず存在し、結局問題文の条件を満たさないことがわかりました。
計算量は、です。
D - Weak Takahashi
グリッド上を右又は下にのみ移動する場合のDPは典型かと思います。
マス(i,j)までに移動した時に訪れたマスの最大値
と定義すると、
初期値は、マス(1,1)のみ1で、後は0です。
マス(i,j)にはマス(i-1,j)またはマス(i,j-1)から移動できる(遷移元となる)ので、遷移は、
です。この遷移を基に左上から順に行うことで、各マスの最大値を決定できます。
なお、
・マス(i,j)が壁なら無視
・遷移元のマスがグリッドをはみ出す場合や、壁の場合は、無視
ようにします。
今回、気をつけないといけないのが、辿りつけないマスが存在することです。
これは、
・遷移元となるマスのdpの値が0なら無視
することで、dpの値が0なら壁であるか、到達できないマスであることが保証されます。
E - Rook Path
実際に小さいケースでシミュレーションしてみると、以下の事実に気づきました。
・以下のマスは同値としてグルーピングできる。
a. ルークがいる初期マス
b. 初期マスと同じ列のマス
c. 初期マスと同じ行のマス
d. それ以外
i回目の移動が終わった時の各グループにルークがいる方法をとするとi+1回目の移動後の方法を以下の通り計算できます。
これらの式は、実際にグリッドを書いてみて、自分を除く同一の行と列にa,b,c,dが何個含まれるか考えると導けます。
とし、K回これを計算した後、がどのグループに属するかに応じて値を出力すればよいです。
同値をグルーピングするというのは、逆に考えると、
同一の計算方法をとることができるマスをグルーピングするとa,b,c,dの4つのグループに分けられ、これらは同一の計算方法であるため同値となる。
とも言えそうです。