🎉

JavaScriptでABC433 (A-D)

に公開

https://atcoder.jp/contests/abc433

A - Happy Birthday! 4

https://atcoder.jp/contests/abc433/tasks/abc433_a

なんかわり算のあまりとかできれいにやる方法はあるんでしょうけど、だるいので適当にシミュレーションしちゃいましょう

https://atcoder.jp/contests/abc433/submissions/71115512

1分59秒 AC!

B - Nearest Taller

https://atcoder.jp/contests/abc433/tasks/abc433_b

forの初期値・条件式・変化式をうまく書こうってだけですね
以下のように書くと人iのすぐ左の人から順番に左に向かって見ることができます

    for (let i = 1; i <= N; i++) {
        for (let j = i - 1; j >= 0; j--) {
            // 省略
        }
    }

https://atcoder.jp/contests/abc433/submissions/71119362

4分39秒 AC!

C - 1122 Substring 2

https://atcoder.jp/contests/abc433/tasks/abc433_c

1122の悪夢、再来……!

ランレングス圧縮をして「数字個数個」というデータの配列を作ると、その先頭要素以外について順に
「前のやつと今のやつで並んでる数字が+1になっていれば、(前のやつと今のやつの個数のうち小さい方)個をそこで作れる」
ということができ、あとはやるだけ

https://atcoder.jp/contests/abc433/submissions/71128982

11分34秒 AC!

D - 183183

https://atcoder.jp/contests/abc433/tasks/abc433_d

  • jを固定したとき、A_i \times 10^{A_j\text{の桁数}} \equiv -A_j (\mod M)になるA_iが条件を満たします。
  • 事前にすべてのAについて、A \times 10^{x} \mod M1 \le x \le 9の範囲で計算して計算結果が0以上M未満の各値になる個数がわかってれば即答できそうです

めんどいから各値になる個数は配列で持っておけばいいかな……

https://atcoder.jp/contests/abc433/submissions/71147240

……?(TLE)

とりあえずバカでかい数になってBigIntを持ち出している箇所があるのでそこをどうにかしましょうか

// 避けれるならこれは避けたいですよね
const y_onAi = Number((BigInt(Ai) * 10n ** BigInt(x)) % BigInt(M));

で、modの性質を考えると、n * 10 % M === (n % M) * 10 % Mだな〜となり、順番に計算すれば大きな数を扱わなくても同じものが作れますね!これでいけたら嬉しいなぁたぶんだめだろうけど

https://atcoder.jp/contests/abc433/submissions/71151985

うん(TLE)

ここで制約を見直して気づきました、M \le 10^9なので個数を配列で持って埋めてたら1億ループ回すことになって間に合いませんね!やらかしました
Mapに変えて該当個数が0のところは飛ばすことにします。
配るDPっぽい書き方をすると漏れなく楽に必要なところを全部埋めれると思います。

https://atcoder.jp/contests/abc433/submissions/71155045

54分47秒 AC!

E-G

  • E: 「i = 1, 2, ..., Nに対し\max_{1\le j\le M}A_{i,j}=Xiが成り立つ」の部分が=じゃなくて\leなら下から埋めるだけなんですけど、ちょっとわからぬ……
  • F: なにをどうやったら重複せずにカウントできるというのですか
  • G: 何も思いつかん

Perfomance

  • perf : 1129
  • レート変化 : 868 → 897 (+29)

感想

2ペナしたものの久々に4完できて嬉しい!
レートも伸びたのでいい感じ。Highest更新も十分射程圏内。

とはいえDでサボってTLEしちゃったのはかなりもったいない。それがなければ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 426 427 428 429 430
43x 431 432

Discussion