イノたまごラボ・あのぶる の「こんなの作ったよ!」

「イノたまごラボ」はひとり同人サークルのようなものです。今のところ同人誌は作っていませんが、ソフトウェアからイベントまで、心惹かれたものを細々と。

二分探索と仲良くなりたい~めぐる式二分探索との出会いと躓いた問題のやり直し

昨日のABCがまぁ惨憺たる結果で結構ショックを受けておりました。

blog.innotamago.com

Cはもう仕方なかったとして、D問題の二分探索は*1類題をしっかり思い出してそのACコードまで並べながらやっていたのにボロボロであまりにもあんまりだ、ということでこちらはまだ具体的に出来る対策がありそうだということでちょっと時間を割いてみました。

ケンカ中の恋人か何かかな?

ABC319終了時点の当人のスペック

  • 二分探索の基本的な考え方は理解しており、後述する記事にある「テスト何点だった?」の例題であれば適切に質問を組み立てられる
  • Rubyの組み込み関数であるArray#bsearchArray#bsearch_indexで解決できるようなタイプであれば特に引っかかることなく記述できる

というわけで何をしたか

この記事を読みました。とても読みやすく、大変分かりやすかったのでお勧めです。

zenn.dev

どのくらい分かりやすかったかと言うと、私が過去3回やって3回とも自力で解けなかった典型90のYokan Partyがようやく解説を読まずに解けたくらい分かりやすかったです*2
紹介されているスタイルを「めぐる式二分探索」と呼ぶそうなのですが、二分探索の評価周りをバグらせにくくてすごく良いと思いました。

実際にやってみた問題

どちらも何とか解説を読まず解くことができました🎉

その1

最初にもう一度昨日のD問題を解きました。

atcoder.jp

どうやら解説のコードが概ね近いスタイルだったみたいで、細かいところがよりRubyっぽくなった以外は昨日のコードとあまり大きな違いはないです。

その2

次はその類題と判断した、因縁のYokan Party

atcoder.jp

改めてちゃんと自分のコードで解けるようになってみて、やっぱり類題とみてよい内容だと思いました。目の付け所はよかったんだけどな…

これでやっと羊羹を美味しく食べることが出来そうです(?)

*1:時間をあまりかけられなかったとは言え

*2:最後、二分探索とは全く関係ないところでずっと詰まっていたのは内緒