🥰

JavaScriptでABC426(A-D)

に公開

https://atcoder.jp/contests/abc426

A - OS Versions

https://atcoder.jp/contests/abc426/tasks/abc426_a

全パターン比較書いても9パターンしかないし、if...elseを9回書いても別にいいと思う
楽するならこっちで勝手にバージョン番号をつけてしまうのがいいかなぁ

https://atcoder.jp/contests/abc426/submissions/69823022

1分29秒 AC!

B - The Odd One Out

https://atcoder.jp/contests/abc426/tasks/abc426_b

Bは愚直……愚直……?

出現した文字の種類(Array)と各文字の出現回数(Object<string, number>)を前から走査する形で作って、各文字種について出現回数が1回なら出力する感じ

出現した文字の種類はわざわざArrayで記録しなくてもfor...inを使えばいい気はするな……

https://atcoder.jp/contests/abc426/submissions/69826918

3分35秒 AC!

C - Upgrade Required

https://atcoder.jp/contests/abc426/tasks/abc426_c

「もうアップグレードしたからこのバージョン以下のPCはないよ」を持っておけばfor文の範囲を縮めることができて、それだけやってしまえばあとは愚直

forの範囲が被らないから線形時間になるんですね……
理屈はわかってるんだけどACもらうまで超不安だった

https://atcoder.jp/contests/abc426/submissions/69850658

30分51秒 AC!

D - Pop and Insert

https://atcoder.jp/contests/abc426/tasks/abc426_d

基準となる文字を(i文字目と)1つ決めると、i文字目を含む同じ文字が連続する部分の端っこにくっつけるムーブをするのが最速に見えます
……ので、基準となる文字を先頭から末尾までループしながらそうなるときの最短手数を計算して最小更新したら代入を繰り返せばいいです
前または後ろに同じ文字が続いているパターンの除外方法は色々ありそうですが、私は「次の文字が同じ文字ならCO += 1、そうでなければCO = 0」として、同じ文字が連続する部分文字列の末尾のときだけ計算するようにしました COはcarry_overのつもり

https://atcoder.jp/contests/abc426/submissions/69865477

66分44秒 AC!

E-G

  • E: ガチ数学っぽそう……三分探索ってどこかで聞いたこともある気がするけど残り時間で書ける気がしないので断念
  • F: なんかこれを解くのに使えるデータ構造がありそうな気配を感じるけど知らないのでパス!
  • G: 見てない

Perfomance

  • perf : 1073
  • レート変化 : 856 → 880 (+24)

感想

おしゃーーかなり盛れた、嬉しい
なんか久々にD問題が解けたような気がします これを安定させたい
強いて言うならC問題はもうちょっと早く解けても良かったかもしれない。気づくのに時間かかったので15分くらいまでで倒せればもう少し伸びそう


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

xx1 xx2 xx3 xx4 xx5 xx6 xx7 xx8 xx9 xx0
40x 402 403 404 405 406 407 408 409 410
41x 411 412 413 414 415 416 417 418 419 420
42x 421 422 423 424 425

Discussion