♨️
JavaScriptでABC432 (A-C)
A - Permute to Maximize
受け取った3つの数字を降順ソートしてくっつける
降順ソートはarray.sort((a, b) => b - a)とかで。
ソート知らなくても6通りしかないから全部作って一番大きいやつ出力するとかすればいいでしょう
1分08秒 AC!
B - Permute to Minimize
0の処理がちょっとめんどいね
Xを1文字ずつに分けて受け取ってnumberに変えておく。で、
- 0じゃないものだけ抜き出して昇順ソートしたもの
- 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()で取っていいと思いますよ
4分36秒 AC!
C - Candy Tribulation
別に子供は並び替えてもいいのでとりあえずAはソートします。
まず、「個数がほしい子を全部小さい飴で埋めたときの重さ」が「一番個数いらない子を全部大きい飴で埋めたときの重さ」を上回るとどうしようもないのでそのパターンを先に弾きます。
……で、「一旦全ての子供に配る個数だけ大きい飴を渡すと、一番個数いらない子を全部大きい飴で埋めたときの重さを何グラム超過するか?」がわかって、これが全部
(
差し替えた数と全員に渡した個数はわかるので、引き算して解答。
……あの、実装重くないですか??
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