🔥

JavaScriptでABC428 (A-C)

に公開

https://atcoder.jp/contests/abc428

A - Grandma's Footsteps

https://atcoder.jp/contests/abc428/tasks/abc428_a

最終回は除いて一回計算して、最後の一回に残っている秒数を出して足します
頭バグってめっちゃ時間かかった なにしてるんですか

https://atcoder.jp/contests/abc428/submissions/70219043

4分33秒 AC!

B - Most Frequent Substrings

https://atcoder.jp/contests/abc428/tasks/abc428_b

Bは愚直
全部列挙して数えます やるだけですね!!
出力2行目のソートをお忘れなく

https://atcoder.jp/contests/abc428/submissions/70225674

11分07秒 AC!

C - Most Frequent Substrings

https://atcoder.jp/contests/abc428/tasks/abc428_c

まあ「あと何個)が必要か」を更新しつつ、それが一回でも負になっちゃうならその位置を覚えといてそこを消すまでNoって言い続ければ良さそう
実装めんどくせ〜〜!!

https://atcoder.jp/contests/abc428/submissions/70238381

29分23秒 AC!

D-G

  • D
    • C+xの桁数で分けて考えると、できる数の範囲がそれぞれ出てきます
      • テストケース1番目なら、「44〜49、410〜484」のように
    • それぞれの範囲n〜mについて「\sqrt{n}以上\sqrt{m}以下の整数の数」を求めることができます
      • \lfloor{\sqrt{m}}\rfloor - \lceil{\sqrt{n}}\rceil + 1
      • これがそのまま「n以上m以下の平方数の数」になります
    • 各テストケースごとにDの桁数回この計算をすればいいからたぶんO(T\cdot\log_{10}{D})で行ける気がする
    • ……と思ったんですが、制約を考えるとBigIntでの保持が必須だと気づきました
      • f(C, C+x)の最大値は2 \times 10^{18} + 5 \times 10^{9} + 2 \times 10^{8}となり、これはNumber.MAX_SAFE_INTEGER(9 \times 10^{15}くらい)を余裕で超える
    • JavaScriptのMath.sqrt()はBigInt非対応で、自力実装もO(\log N)しか思いつかなかったのでおそらく実行時間制限に間に合わないだろうと判断し諦めました
  • E
    • 調べたら「全方位木DP」っていうまんまそれっぽいものが出てきました
    • 私は全方位木DPどころか木DP、なんならDPも知らないのでパス
  • F, G
    • チラ見してなんもわかりませんでした

Perfomance

  • perf : 985
  • レート変化 : 858 → 871 (+13)

感想

まあ温まったので許しましょう
D解けなかったの悔しい〜〜〜


過去の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 426 427

Discussion