📘

『競技プログラミングの鉄則』書評

2022/11/06に公開

書籍『競技プログラミングの鉄則』(マイナビ出版)を著者の @e869120 氏から恵贈いただいたので書評を記します。

C++ で書かれたコンテスト対策本は、いわゆる蟻本 (2012), 螺旋本 (2015) があり、コンテストが一部のマニアックな情報系向けだった時代のニーズには十分な書でした。

ところが昨今の AtCoder を中心とする競技人口の変化、レーティング競争、過去問の蓄積によって、エントリーレベルかつ効率的に基本テクニックを習得できる、モダンなジャッジシステムと連係する学習リソースの需要が高まり、競プロ典型 90 問 (2021) のような試みがなされてきました。

本書はその延長線上にあり、AtCoder の大多数の登録者、あるいは潜在的な登録者、つまり膨大な過去問から地道にテクニックを吸収していく体力と時間的な余裕が足りず、低難度の問題から先へ進むことができない人々の道標となる書籍として登場しました。

本書の目次を見ると、一定の経験者にとっては朝飯前のテクニックが並び、新鮮味に欠けるかもしれませんが、彼らがここに並ぶテクニックを知るまでに費やした時間や問題数を思い返すと、今日の入門者がここまで体系化された教材で知識を高速に獲得できることを羨ましく、あるいは末恐ろしく思うでしょう。

本書では、実際のコンテスト形式の問題が出題されますが、過去コンテストからの引用は少なく、代わりに非本質部分を極力省略した書き下ろしの問題が収録されています。こうした工夫のおかげで、解説コードが最小限の分量になるため読み進めやすく、また、コードを写経して学ぶタイプの読者は大いに助かるでしょう。

一方で本書には、冒頭で紹介した過去書籍同様に、コンテスト攻略に偏重しすぎているという欠点(読者によっては利点)があります。サンプルコードに登場する int x[100009] のような配列、再利用性の低いクラス・関数設計がその例です。こうしたコードは「競プロが実務で役に立たない」というイメージを幾ばくか肯定してしまうため、大学で C++ を教える私の立場としては注釈を付けなければなりません(ちなみに『競プロのための標準 C++』 は私なりのアプローチです)。

とはいえ、その欠点を差し引いても、本書は競技プログラミングが人口に膾炙する時代のニーズに応えられる、現時点で最良の解説書であり、著者がこれまで競技参加者の中で誰よりも積極的に積み重ねてきたアウトプットの集大成ともいうべき説明と図解の妙が光る労作です。

アルゴリズムやデータ構造が現実の課題解決に役立つのか懐疑的なプログラマの朝読書に、後輩のプログラミングコンテスト出場を応援する部活の部室に、同期と一緒に AtCoder を切磋琢磨する研究室の本棚に、コンテストを目指すも独学に限界を感じている高校生の机に、おすすめの一冊です。

GitHubで編集を提案

Discussion