👺

JavaScriptでABC417 (A-C)

に公開

https://atcoder.jp/contests/abc417

A - A Substring

https://atcoder.jp/contests/abc417/tasks/abc417_a

そういうことをするメソッドがあった気がしますが、パッと思い出せなかったので魂のArray.prototype.shift()
脳筋すぎる

あとから検索しました

たぶんString.prototype.slice()ですね
console.log(S.slice(A, -B))をすればよさそうです。
(ただし、Bが0だと吹っ飛ぶので分岐つけましょう。普通にif文でもいいし、三項演算子で第二引数にundefinedを投げる方針でもいいです)

https://atcoder.jp/contests/abc417/submissions/68102980

1分47秒 AC!

B - Search and Delete

https://atcoder.jp/contests/abc417/tasks/abc417_b

Bは愚直

問題名のとおり、「探して消す」をやります
探すのはArray.prototype.indexOf()Array.prototype.findIndex()でいいですね
消すのは「nullに置き換えて、あとでnullArray.prototype.filter()で吹き飛ばす」が楽だと思います。

https://atcoder.jp/contests/abc417/submissions/68109057

4分46秒 AC!

C - Distance Indicators

https://atcoder.jp/contests/abc417/tasks/abc417_c

累積和かな〜って考えてたら5分くらい溶かしてました なにしとんねん

なんか文字式ぶん回したらそれっぽい結果が出てくるのかな〜と思ってごちゃごちゃやってたら

j - i = A_i + A_j \\ j = A_i + i + A_j \\ j - A_j = A_i + i \\ j - A_j = i + A_i

……こーれどっちも先に計算しとけってことか?

  • 事前に1 \le i \le Nについてi + A_ii - A_iを計算しておきます
  • で、i - A_iの方の配列のindexを、計算結果が何になるかで分類します
    • [0, 2, 2, 1]{ 0: [0], 1: [3], 2: [1, 2] }みたいな
    • このオブジェクトをgroupedとします
  • 1 \le i \le Nについて、grouped[i + A[i]]のうちi + 1以上のものが何個あるかをそれぞれ数えて全部足します
    • ちゃんと二分探索をしよう!

https://atcoder.jp/contests/abc417/submissions/68132091

31分15秒 AC!

D-G

なんもわからんよ〜
DはP_iA_iB_iの最大がX_iに比べて明らかに小さいのがなんか引っかかるな〜と思いつつ何も思いつきませんでした


Perfomance

  • perf : 713
  • レート変化 : 823 → 812 (-11)

感想

425点のD問題が解けないのはまあしゃーないとして、C問題解くのがちょっと遅かったかなぁ……
できればさっと気づいて20分くらいでACしたい問題な気はしますね

とはいえ425点以上の問題のACを出せないとさすがに頭打ちだと思うぞ……


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

Discussion