JavaScriptでABC408(A-C)
A - Timeout
肩を叩かれた時間を(0秒含めて)並べて、隣接する肩叩きタイムがすべてS秒以下ならおk
入力の受け取りがA問題にしては面倒ですね、150点な理由はそれでしょうか
2分57秒 AC!
B - Compression
B問題は言われた通りやるの法則
「重複を除いて」 → Set
「小さい順に」 → Array#sort()
強いてあげるなら、JavaScriptで数値の昇順ソートをするときはcompareFnを指定しなきゃいけないくらいでしょうか
前Cosenseに書いたのでそっちを見てください
4分44秒 AC!
C - Not All Covered
「守ってくれる砲台が最も少ない城壁」を守っている砲台を狙って破壊するのが最小になるので、「守ってくれる砲台が最も少ない城壁は、いくつの砲台に守られているか?」に問題を読み替えます
xの初期値を0として、iを1から順番に、「守備範囲の左端がiな砲台の数をxに足す → xの数を記録 → 守備範囲の右端がiな砲台の数をxから引く」をしたときの、記録されたxの最小値があれば良さそう。
すべてを記録しなくても最小値だけ記録すればいいので、「これまでのxの最小値」をInfinityで初期化しておいて下回ったら更新すればいいと思います。
この手法なんて言うんでしょう、尺取法なのか……? これがimos法なんですね
12分22秒 AC!
D-G
D - Flip to Gather
一旦ランレングス圧縮をして、左右端の0は取っ払っておく
で、なんかうまい方法があるんだろうな〜と試行錯誤していました
サンプルケース通るのにWAになるとき、普段のデバッグができなくて辛いですね
結局わかりませんでした
解説を見ました 数学回なんですかこれ まじか
E-G
チラ見しましたが無理そうなので諦め
Perfomance
- perf : 832
- レート変化 : 764 → 771 (+7)
感想
D400が解けないとボロボロですね……
Cまでがたぶん過去最速だったのでレート下がってはいないものの気分的には負け
どこかでperf1000以上が出せれば入緑できるので頑張りたい!次回決着つけたいです
過去のABCも似たような記事を書いています。よければそちらもどうぞ。
Discussion