米田優峻:競技プログラミングの鉄則

作成日 : 2025-04-18
最終更新日 :

概要

副題は「アルゴリズム力と思考力を高める 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 円(本体)
サイズページ
ISBN978-4-8399-7750-4
その他越谷市立図書館で借りて読む

まりんきょ学問所コンピュータの部屋コンピュータの本プログラミング > 米田優峻:競技プログラミングの鉄則


MARUYAMA Satosi