♨️

JavaScriptでABC432 (A-C)

に公開

https://atcoder.jp/contests/abc432

A - Permute to Maximize

https://atcoder.jp/contests/abc432/tasks/abc432_a

受け取った3つの数字を降順ソートしてくっつける
降順ソートはarray.sort((a, b) => b - a)とかで。

ソート知らなくても6通りしかないから全部作って一番大きいやつ出力するとかすればいいでしょう

https://atcoder.jp/contests/abc432/submissions/70948000

1分08秒 AC!

B - Permute to Minimize

https://atcoder.jp/contests/abc432/tasks/abc432_b

0の処理がちょっとめんどいね

Xを1文字ずつに分けて受け取ってnumberに変えておく。で、

  1. 0じゃないものだけ抜き出して昇順ソートしたもの
  2. 0の個数をカウントしたもの(filterで0だけ抜き出してlengthを見る)

の2つを作ると、「(1)の先頭要素」「0を(2)個」「(1)の先頭以外の要素」を順につなげた文字列が答えになります。
(1)を先頭とそれ以外に分けるのが少々だるいですが、私は残余引数を使いました。

example.js
const X_zero_count = 2;
const fn = (first, ...remain) => {
    return `${first}${"0".repeat(X_zero_count)}${remain.join("")}`;
}
console.log(fn([1, 3, 5])); // <- <string> 10035

別にB問題ならarray.shift()で取っていいと思いますよ

https://atcoder.jp/contests/abc432/submissions/70954212

4分36秒 AC!

C - Candy Tribulation

https://atcoder.jp/contests/abc432/tasks/abc432_c

別に子供は並び替えてもいいのでとりあえずAはソートします。
まず、「個数がほしい子を全部小さい飴で埋めたときの重さ」が「一番個数いらない子を全部大きい飴で埋めたときの重さ」を上回るとどうしようもないのでそのパターンを先に弾きます。

……で、「一旦全ての子供に配る個数だけ大きい飴を渡すと、一番個数いらない子を全部大きい飴で埋めたときの重さを何グラム超過するか?」がわかって、これが全部Y-Xの倍数なら適切な数の飴を大から小に差し替えます。
(Y-Xの倍数じゃない人間がいたらどうしようもないので不可能と解答。)
差し替えた数と全員に渡した個数はわかるので、引き算して解答。

……あの、実装重くないですか??

https://atcoder.jp/contests/abc432/submissions/70970070

34分20秒 AC!

D-G

  • D: 矩形領域の集合で連結成分を管理しろってことだと思うんですけど、実装めちゃくちゃ重いし計算量見積もりもできなかったので断念。65分あればいけたか……?
  • E: いやクエリごとO(\log N)でやれって言ってるから二分探索とかセグメント木(存在だけ知っててコンテスト中に名前を調べました、あれがセグ木なんですね)なんだろうな〜まではわかった
  • F, G: わからんよ〜〜

Perfomance

  • perf : 969
  • レート変化 : 849 → 862 (+13)

感想

トラウマのC350-D425-E450配点でレートを上げることに成功したので一旦許します。
D425-E450のときの立ち回りは悩ましいね……
セグメント木はお勉強しましょう。


過去の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 428 429 430
43x 431

Discussion