🎉

JavaScriptでABC420(A-E)

に公開

https://atcoder.jp/contests/abc420

A - What month is it?

https://atcoder.jp/contests/abc420/tasks/abc420_a

XとYを足して12で割ったあまりを求めると月になります
答えが12月の場合だけ0になっちゃうので、そこだけ||演算子とかで拾い上げればOK

https://atcoder.jp/contests/abc420/submissions/68732622

00分51秒 AC!

B - Most Minority

https://atcoder.jp/contests/abc420/tasks/abc420_b

Bは愚直

人数分の長さのnumberの配列を0で初期化して、投票結果を一回ずつ集計して少数派にポイントを上げればOK
途中iとj逆に書いちゃって混乱しかけましたが耐え

https://atcoder.jp/contests/abc420/submissions/68741593

7分48秒 AC!

C - Sum of Min Query

https://atcoder.jp/contests/abc420/tasks/abc420_c

「現時点の\sum_{k=1}^{N}{\min(A_k, B_k)}」を各クエリを処理するごとに求めることができます

クエリを処理する前の初期値は普通に計算すればOK
クエリ処理時、min(A_k, B_k)min(変えなかったほう, V_i)の差だけ合計値が変わるので、それを反映してあげます。

https://atcoder.jp/contests/abc420/submissions/68749388

18分14秒 AC!

D - Toggle Maze

https://atcoder.jp/contests/abc420/tasks/abc420_d

グリッド怖いよ〜〜〜

まあBFS(最短経路必須だからDFSじゃないよ)でしょう
とりあえずBFSやるならキューが必要になりますね、私はDequeを作ってるのでこれを使います

「与えられた迷路とドアの開閉が反転した迷路があり、スイッチマスに移動しようとした瞬間にそれらを行き来する」みたいに考えるとうまく探索できると思います
訪問が確定している場所はSetで管理。
私はn/1/1とかr/2/1みたいな「${currentMaze}/${i}/${j}」形式の文字列を保存してました

あと最短手数が必要なので、各マス(通常迷路と反転迷路は区別する)への最短手数は都度メモっておきましょう どうせ一回しか訪問しないから大小比較して小さい方を……とか考える必要はなし

https://atcoder.jp/contests/abc420/submissions/68768916

57分14秒 AC!

E - Reachability Query

https://atcoder.jp/contests/abc420/tasks/abc420_e

無向グラフで連結判定に近いけど"黒色"をどう処理すればいいか……
ちょうど今日の夕方にUnion-Findを用意したのでこれが使えないかと考えた結果思いつけました

「各要素が黒色か」と「(根の要素限定で)その要素が含まれる木の中に黒い要素はいくつあるか」を持ってunion()のときにsizeと同様に処理してあげれば、「根を見つける→その要素が含まれる木の中に黒い要素が1つ以上あれば到達可能」といえます
ということでがんばってそれをやります Union-Find作っておいてよかった〜〜!!

https://atcoder.jp/contests/abc420/submissions/68779753

86分36秒 AC!

F-G

チラ見したけど見当つかなかったよ


Perfomance

  • perf : 1025
  • レート変化 : 841 → 861 (+20)

感想

祝、初5完!!!!!嬉しい!!!!!!
DequeとUnion-Findを持っていたのがだいぶプラスに働きました、最高


過去のABCも似たような記事を書いています。よければそちらもどうぞ。

Discussion