プログラミングコンテストチャレンジブック

プログラミングコンテストチャレンジブック

出版信息

秋葉 拓哉、岩田 陽一、北川 宜稔 / 毎日コミュニケーションズ / 2010-09-11 / JPY 34.44

内容简介

現在、プログラミングコンテストは数多く開催されています。Google Code Jam、TopCoder、ACM/ICPCなどの名前を聞いたことがある人も少なくないでしょう。本書で扱うのはそれらのような、問題を正確にできるだけ多く解くことを競うプログラミングコンテストです。

プログラミングコンテストは気軽に参加することができます。例えば、Google Code JamやTopCoderはインターネット経由でコンテストが行われるので、Webサイトでの登録を済ませ、決まった時間にコンピュータの前に居れば参加することができます。

しかし、プログラミングコンテストの世界は非常に奥が深く、経験を積んだプログラマーであっても良い成績を残すことは容易ではありません。プログラミングコンテストで勝つには、柔軟な発想力と幅広い知識を用いて問題を解くアルゴリズムを考え、それらを正確に実装しデバッグできなければなりません。

プログラミングコンテストは上級者だけのためのものではありません。多くの場合、初心者でも取り組めるような問題も用意され、幅広い参加者が楽しめるように配慮されています。また、良い成績が収められなくても、上に述べたような能力を効率的に向上させることにつながりますし、何より、楽しく充実した時間を過ごすことができます。

本書は著者陣が多くのプログラミングコンテストに参加し、練習や勉強を重ねて得た、さまざまな知識やノウハウをまとめたものです。主にアルゴリズムや考え方について扱っており、非常に基礎的な内容からはじめ、かなりハイレベルな内容まで扱っています。それらは難易度や依存関係を考えて並べられており、内容の多いトピックは難易度で分けて何度か扱っています。各トピックの解説は、説明と例題から成っています。

本書を読むために必要なものは、基礎的なプログラミング能力だけです。ソースコードはC ++で記述されていますが、基本的な機能のみを使っており、C++の経験がなくても読みやすいように配慮しました。

作者简介

秋葉拓哉(Takuya Akiba)

2007年、東京大学に入学

プログラミングコンテストではiwiとして活躍

主な戦績はTopCoder Open 2009での9位など

岩田陽一(Yoichi Iwata)

2007年、東京大学に入学

プログラミングコンテストではwataとして活躍

主な戦績はGoogle Code Jam 2009での3位など

北川宜稔(Masatoshi Kitagawa)

2007年、東京大学に入学

プログラミングコンテストでは kita_masa として活躍

主な戦績はICPC World Finals 2010での16位など

目录

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
領域木
完全マッチングの個数
もっと高速な漸化式の計算
さまざまなグラフに対する最大流
高速なフローアルゴリズム
さまざまなグラフに対する最小費用流
計算誤差
多倍長演算

本文地址:https://www.codercto.com/books/d/1263.html

图片转BASE64编码

图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器

Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换

UNIX 时间戳转换

UNIX 时间戳转换