tinumu's reminder

競技プログラミングについて書いてあります。

ABC170 参加メモ

温まってる時に限って精神が安定してるな
243th Perf=2069 1846->1870(+24)
Highestあたりにまた戻して行かないといけないので頑張ります

A - Five Variables

一つづつ判断してもいいがforで回して 0 か判断するのが早そう

B - Crane and Turtle

最小が 2X でそこから二本ずつ増やして 4X に出来るので、 Y は偶数で 2X \leq Y \leq 4X になっていれば "Yes" と出力できる。

C - Forbidden List

値を全探索する。flagとかで使ったやつを管理すればいい 0101 が答えになることがあるということに注意

D - Not Divisible

A \lt B みたいな条件で AB で割れることはないので小さい順にソートしておく
A_i がそれぞれ A_i の倍数を全て埋めていくと(エラトステネスみたいに)、A_j(i \lt j) が呼び出された時に割り切れるかどうかがわかるので、やっていく。
計算量は調和級数になるので \mathrm{O}(N \log N)

E - Smart Infants

現在の幼児の位置を管理して、それぞれ一番大きい値を出せるようにすればいいので、 2 \times 10^5 個 multiset を用意してやるとそれぞれの幼稚園で一番大きい値を取り出せる 移動とかも出来る
その一番大きい値たちを multiset に入れておくと、小さい値がいつでも取り出せるので この問題を解ける。

F - Pond Skater

普通にエッジ張って幅でやると言っても、使ったマス以降はだいたい使わなくていいので、そこで O(HW) くらいで行けそうだなってなる。
気をつけるべきなのは、異なる方向で進んでいて、同コストになっている者同士は同じように見てはいけない。そのため、方向を持ちながら条件に気をつけてやると、ACする。
なんか見落としがありそうなので、嘘解法なんですかね(知見のある人教えていただけるとありがたいです)

感想

Eまでは順調だったが、Fでかなり時間をかけてしまった。
やっぱり実装力が落ちている気がするな。
とはいえ今はAtCoderだなという感じがある(同じこと毎回言ってる気がするが)
引き続き精進したい。