🤔

JavaScriptでABC418(A-C)

に公開

https://atcoder.jp/contests/abc418

A - I'm a teapot

https://atcoder.jp/contests/abc418/tasks/abc418_a

末尾3文字が"tea"かって聞かれてるので、末尾3文字をとってくればいいですね
S.slice(-3)です

https://atcoder.jp/contests/abc418/submissions/68307726

0分53秒 AC!

B - You're a teapot

https://atcoder.jp/contests/abc418/tasks/abc418_b

Bは愚直
言われた通り書く!それだけ

部分文字列全列挙がだるいかも。
私はこうしました

    for (let l = 0; l < S.length; l++) {
        for (let r = l; r < S.length; r++) {
            const t = S.substring(l, r + 1);
            // ここでtについて処理
        }
    }

https://atcoder.jp/contests/abc418/submissions/68317565

6分45秒 AC!

C - Flush

https://atcoder.jp/contests/abc418/tasks/abc418_c

ディーラーの最善手は「すべてのフレーバーをb-1個渡す」
なんかごちゃごちゃやったらたどり着いてしまった コード見たほうが早い

https://atcoder.jp/contests/abc418/submissions/68330225

21分19秒 AC!

D - XNOR Operation

https://atcoder.jp/contests/abc418/tasks/abc418_d

なーんの見当もつかなかったので飛ばす!

E - Trapezium

https://atcoder.jp/contests/abc418/tasks/abc418_e

台形判定のために、「2点を選んだとき、その線の傾きが何になるか(有理数)」を全通り計算して個数カウント。
傾きでグループ分けしたときの各グループの個数がわかるので、そこから2つ選ぶ場合の数を全部求めて足す。

で、平行四辺形は2回数えてるので平行四辺形を引く必要があって……
平行四辺形は対辺の長さが等しいので、最初のグループわけを「傾き & x軸方向とy軸方向のうち長い方の長さ」で行って2つ選ぶ場合の数を全部求めて足して2で割ると平行四辺形の数になる。これを引く

https://atcoder.jp/contests/abc418/submissions/68363736

TLE、かなしい
台形判定に絶対傾きは必要だと思うので、平行四辺形部分を早くするしかないと思うんだけど何も思いつかずギブアップ

F,G

見てないよ〜
Fは一瞬チラ見したけどなんもわかんなかったのでよし


Perfomance

  • perf : 843
  • レート変化 : 812 → 815 (+3)

感想

しぶいっすね……
Cまでがそこそこ速かったこと、Dを捨てたのはいい判断だったと思います


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

Discussion