副題は「アルゴリズム力と思考力を高める 77 の技術」。
本書のサポートページ(book.mynavi.jp)
要再読である。
参考文献リストには、私が今まで読んできた本もある。
本書は、書面では C++ のみを解説しているが、著者が用意している GitHub 上のサポートページでは、 C++ のほか Python、Java の実装例も掲載されている。
ただし、「8 章データ構造とクエリ処理」の「8.5 集合の管理(C++ のみ)」は、節の表題の通り、C++ のみを取り上げている。 これは Python には集合を管理するデータ構造が用意されていない、ということではないはずだ。実際、 Python でも set (集合)型がある。 set(集合)型 --- set, frozenset¶ (docs.python.org) を参照してほしい。
同じく 8章では、セグメント木について述べられている。セグメント木は計算幾何学の分野で初めて知った。 これから多く使われるようになるのではないかと思う。
p.55 の解答例 (C++) を引用する。
#include <iostream>
using namespace std;
int N, A[100009], S[100009];
int Q, L[100009], R[100009];
(後略)
A, S, L, R の配列がどれも 100009 である理由は何だろう。なお、N, Q は対話で与えられる数で、ともに 1 以上 100000 以下が保証されている。 その後のコードを見ても、A, S, L, R のどれも、添字の上限は 100000 のように思われるので、A[100001] のように宣言してよいと思われる。 ただ、100001 より多くしたかった気持ちもわかる。ぎりぎりを追及して、もし何かあったときにオーバーランしては困るからだ。 ではなぜ 100001 より 8 だけ多い 100009 にしたのだろうか。これに関してはあまり詳しく突っ込まない方がいいのだろうか。
書名 | 競技プログラミングの鉄則 |
著者 | 米田優峻 |
発行日 | 2022 年 9 月 16 日 初版 第 1 刷 |
発行元 | マイナビ出版 |
定価 | 3380 円(本体) |
サイズ | ページ |
ISBN | 978-4-8399-7750-4 |
その他 | 越谷市立図書館で借りて読む |
まりんきょ学問所 > コンピュータの部屋 > コンピュータの本 > プログラミング > 米田優峻:競技プログラミングの鉄則