ARC224-- 参加記
私です。
ARC224— に参加しました。A, B, C, Eの4完です。
初めてのARC Ratedをしっかり勝てて気持ちがいいです。
A問題 Attach 00
は必ず末尾に を持ちます。ということは、 を順に見て、十進表記に を含む最初のものを出せばよいです。
1ケースにつき高々100個の倍数を調べればよく、それぞれの桁数は最大12桁です。したがって、 より計算量はおよそ
となります。文字列にして contains("00") するだけで十分間に合います。
B問題 Adjacent Tiles
の長方形に並べたとき、完全に共有する辺の数は
です。
一辺が の正方形なら、共有する辺の数は
本です。これは について単調増加するので、まず作れる最大の正方形を作るのが良さそうです。
そこで、
とします。次に、正方形からそのまま一辺を伸ばすことを考えます。
とすると、まず の長方形を作れます。この長方形が持つ共有辺の数は
本です。
残っているタイルの枚数を
とします。 の場合は、長方形の横にタイルを一列追加します。
最初の1枚は長方形と1辺を共有し、以降の1枚は長方形と直前のタイルに接するので、 のとき増える辺の数は 本です。これを長方形の式に足せば答えになります。
つまり、答えは
です。
C問題 Ascending Labels
最初はBFSだと思って実装を投げましたが、嘘解法でした。普通に条件を言い換えたらDFSだなぁとなりました。
BFSの距離を にすると、距離が1小さい隣接頂点が複数存在する場合があります。問題では を満たす隣接頂点がちょうど1つでなければならないため、これでは条件を満たしません。
そこで、頂点1を根としてDFS木を作り、各頂点のDFS木上の深さを にします。
頂点 の親は深さがちょうど1小さいため、 を満たします。また、無向グラフのDFSにおいて、DFS木に含まれない辺は祖先と子孫を結ぶ辺になります。
より深さがちょうど1小さい祖先は の親しか存在しません。したがって、 を満たす隣接頂点もちょうど1つになります。
よって、ただDFSを実装するだけでよいです。
D問題 Angst for All Pairs
本当に意味がわからないです。日本語の意味がわかりませんでした。
E問題 ABC|AB|A
D問題の読解にずっと固執していましたが、ふとEを見ると簡単すぎて悲しくなりました。最初からこっちを見ておけば……。
文字列を後ろから読み、B と C をスタックに積みます。A を読んだときは、次の順番で削除します。
- スタックの一番上が
B、その下がCなら、完成したABCを削除する ABCにはならないが、一番上がBならABを削除する- どちらでもなければ
Aを単独で削除する
これで、削除しきれず残った B と C の数が答えです。
最後に
ARCはABCに比べて、問題に対する考察の比重が多めなので割と好きです。
では、また。