プログラミングコンテストチャレンジブック 第2版 問題解決のアルゴリズム活用力とコーディングテクニックを鍛える


プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~


マイナビ


著名:秋葉拓哉、岩田陽一、北川宜稔


初版の目次

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」
ハードルが上がった「くじびき」

2 基礎からスタート!-初級編
2-1 すべての基本"全探索”
再帰関数
スタック
キュー
深さ優先探索
幅優先探索
特殊な状態の列挙
枝刈り
2-2 猪突猛進!"貪欲法”
硬貨の問題
区間スケジューリング問題
Best Cow Line
Saruman’s Army
Fence Repair
2-3 値を覚えて再利用"動的計画法”
探索のメモ化と動的計画法
漸化式を工夫する
計算問題に対するDP
2-4 データを工夫して記憶する"データ構造”
木・二分木
プライオリティキューとヒープ
二分探索木
Union-Find木
2-5 あれもこれも実は”グラフ"
グラフとは
グラフの表現
グラフの探索
最短路問題
最小全域木
練習問題
2-6 GCJの問題に挑戦してみよう(1)
Minimum Scalar Product
Crazy Rows
Bribe the Prisoners
Millionaire

3 ここで差がつく!-中級編
3-1 数学的な問題を解くコツ
ユークリッドの互除法
素数に関する基本的なアルゴリズム
余りの計算
べき乗を高速に計算する
3-2 値の検索だけじゃない!"二分探索”
ソート列から値を探す
解を仮定して可能か判定
最小値の最大化
平均最大化
3-3 厳選!頻出テクニック(1)
しゃくとり法
反転
弾性衝突
半分全列挙
座標圧縮
3-4 さまざまなデータ構造を操ろう
セグメント木
Binary Indexed Treeとは
パケット法と平方分割
3-5 動的計画法を極める!
ビットDP
行列累乗
データ構造を用いて高速化
3-6 水を流して問題を解く"ネットワークフロー”
最大流
最小カット
二部マッチング
一般マッチング
マッチング・辺カバー・安定集合・点カバー
最小費用流
練習問題
3-7 GCJの問題に挑戦してによう(2)
Numbers
No Cheating
Stock Charts
Watering Plants
Number Sets
Wi-fi Towers

4 さらに極める!-上級編
4-1 より複雑な数学的問題
行列
modの世界
数え上げ
対称性のある数え上げ
4-2 ゲームの必勝法を編み出せ!
ゲームと必勝法
Nim
Grundy数
4-3 グラフマスターへの道
強連結成分分解
2-SAT
LCA
4-4 厳選!頻出テクニック(2)
スタックの利用
デックの利用
LogStepDP
4-5 GCJの問題に挑戦してみよう(3)
Mine Layer
Year of More Code Jam
Football Team
Endless Knight
The Year of Code Jam

本書に掲載した問題リスト
索引
参考文献

column
 スタック領域とヒープ領域
 アルゴリズムの証明
 ハフマン符号
 memset
 全探索の書き方
 初期化
 いろいろなDP
 再利用の仕方
 lower_bound
 平衡二分木
 証明や法則などについて
 収束判定
 Sparse Table
 領域木
 完全マッチングの個数
 もっと高速な漸化式の計算
 さまざまなグラフに対する最大流
 高速なフローアルゴリズム
 さまざまなグラフに対する最小費用流
 計算誤差
 多倍長演算

書籍目次

Posted by shi-n