この記事で使うアルゴリズム
二分探索
はじめに
カテゴリー競プロ初中級者100問では、Qiita
にて@e869120
さんがレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】としてまとめられている100問をPython
で解いています。
全問題の一覧はこちらです
問題
https://atcoder.jp/contests/abc077/tasks/arc084_a
方針
- Bを固定しながら、Bより小さいAはいくつあるかBより大きいCはいくつあるかを考える
- ソートしてから二分探索すると良い。
- 計算量はソートが
O(logN)
でそれをBの数だけ行うO(N)
ので、O(NlogN)
となる。 - 標準ライブラリ
bisect
を使うと良い。
- 計算量はソートが
- ソートしてから二分探索すると良い。
コード
1 | import bisect |
着想
上段(下段)を固定することはすぐに思い浮かぶが、中段を固定することは思い浮かび難いので慣れる必要がある。3層の構造になっている場合は中段の固定を考えた方が問題が簡単に解くことができる。
Bが増えるほど、Aの候補は増えCの候補が減るというような単調性を見つける。単調性があるときは二分探索で計算量を減らす。
関連記事
- bisectを実装する
bisect
に相当する機能を、自前で実装しています。
記事情報
- 投稿日:2020年4月11日
- 最終更新日:2020年6月19日