CHAPTER 1 いざチャレンジ! でもその前に--準備編
1-1 プログラミングコンテストって何?
1-2 どんなコンテストがあるの?
・世界規模のコンテスト--Google Code Jam(GCJ)
・上位ランクを目指せ!--TopCoder
・最も歴史のあるコンテスト--ACM/ICPC
・中学・高校生向けの情報オリンピック--JOI/IOI
・Web上で自動採点--オンラインジャッジ
1-3 この本での進め方
本書で扱う内容について / 使用する言語について / 問題の扱いについて / プログラムについて / さらなる練習方法
1-4 どうやって解答を提出するの?
POJへの提出の仕方 / GCJへの提出の仕方
1-5 効率的なアルゴリズムを目指すには
計算量って何だろう / 実行時間について
1-6 気楽にウォーミングアップ
まずは簡単な問題から / POJの問題「Ants」 / ハードルが上がった「くじびき」
CHAPTER 2 基礎からスタート!--初級編
2-1 すべての基本“全探索”
再帰関数 / スタック / キュー / 深さ優先探索 / 幅優先探索 / 特殊な状態の列挙 / 枝刈り
2-2 猪突猛進!“貪欲法”
硬貨の問題 / 区間の問題 / 辞書順最小の問題 / その他の例題
2-3 値を覚えて再利用“動的計画法”
探索のメモ化と動的計画法 / 漸化式を工夫する / 計算問題に対するDP
2-4 データを工夫して記憶する“データ構造”
木・二分木 / プライオリティキューとヒープ / 二分探索木 / Union-Find木
2-5 あれもこれも実は“グラフ”
グラフとは / グラフの表現 / グラフの探索 / 最短路問題 / 最小全域木 / 応用問題
2-6 数学的な問題を解くコツ
ユークリッドの互除法 / 素数に関する基本的なアルゴリズム / 余りの計算 / べき乗を高速に計算する
2-7 GCJの問題に挑戦してみよう(1)
Minimum Scalar Product / Crazy Rows / Bribe the Prisoners / Millionaire
[練習問題]
CHAPTER 3 ここで差がつく!--中級編
3-1 値の検索だけじゃない!“二分探索”
ソート列から値を探す / 解を仮定し可能か判定 / 最小値の最大化 / 平均最大化
3-2 厳選! 頻出テクニック(1)
しゃくとり法 / 反転 / 弾性衝突 / 半分全列挙 / 座標圧縮
3-3 さまざまなデータ構造を操ろう
セグメント木 / Binary Indexed Tree / バケット法と平方分割
3-4 動的計画法を極める!
ビットDP / 行列累乗 / データ構造を用いて高速化
3-5 水を流して問題を解く“ネットワークフロー”
最大流 / 最小カット / 二部マッチング / 一般マッチング / マッチング・辺カバー・安定集合・点カバー / 最小費用流 / 応用問題
3-6 平面・空間を扱う“計算幾何”
幾何の基本 / ギリギリを考えよ / 平面走査 / 凸包 / 数値積分
3-7 GCJの問題に挑戦してみよう(2)
Numbers / No Cheating / Stock Charts / Watering Plants / Number Sets / Wi-fi Towers
[練習問題]
CHAPTER 4 さらに極める!--上級編
4-1 より複雑な数学的問題
行列 / modの世界 / 数え上げ / 対称性のある数え上げ
4-2 ゲームの必勝法を編み出せ!
ゲームと必勝法 / Nim / Grundy数
4-3 グラフマスターへの道
強連結成分分解 / 2-SAT / LCA
4-4 厳選! 頻出テクニック(2)
スタックの利用 / デックの利用 / ダブリング
4-5 工夫を凝らして賢く探索
枝狩り / A*とIDA*
4-6 分けて解いてまとめる!“分割統治法”
列の分割統治法 / ツリーの分割統治法 / 平面の分割統治法
4-7 文字列を華麗に扱う
文字列に対する動的計画法 / 文字列検索 / 接尾辞配列
4-8 GCJの問題に挑戦してみよう(3)
Mine Layer / Year of More Code Jam / Football Team / Endless Knight / The Year of Code Jam
[練習問題]
・本書で扱わなかった発展的トピック
・本書に掲載した問題リスト
・索引
・参考文献
[Column]
タック領域とヒープ領域 / 貪欲法のアルゴリズムの証明 / ハフマン符号 / memsetによる初期化 / 全探索の書き方 / 初期化忘れに注意 / いろいろなDP / DPにおける配列の再利用 / lower_bound / 平衡二分木 / 証明や法則などについて / 二分探索の収束判定 / 集合の整数表現 / Sparse TableによるRMQ / 領域木 / 完全マッチングの個数 / もっと高速な漸化式の計算 / さまざまなグラフに対する最大流 / 高速な最大流アルゴリズム / さまざまなグラフに対する最小費用流 / 線形計画問題 / 計算誤差 / 整数計画問題 / Trie / より高速な前処理 / 多倍長演算
ページ先頭へ