AOJ攻略ロードマップ
JOI(情報オリンピック)の全体像は 情報オリンピック挑戦ガイド で確認できます。
AOJは、アルゴリズムを「読んで終わり」にせず、実際にコードを書いて力に変えるための練習場所です。
まずは ALDS1 コースの全制覇 を目指しましょう。基本の入力、配列、探索、ソート、グラフ、動的計画法までを順番に進めると、競技プログラミングの土台がかなり強くなります。
進め方
- Code Recipeで考え方を読む
- コピペ用コードを動かして、流れをつかむ
- AOJの問題文を読み、自分で入力形式に合わせて書き直す
Acceptedが出たら、少しだけコードを短くしたり、別解を考えたりする
初級: 基本のレシピ
まずは、アルゴリズムの動きをそのままコードにする練習です。
- ALDS1_1_A: Insertion Sort
- アルゴリズム: 挿入ソート
- ALDS1_2_A: Bubble Sort
- アルゴリズム: バブルソート
- ALDS1_2_B: Selection Sort
- アルゴリズム: 選択ソート
- ALDS1_4_A: Linear Search
- アルゴリズム: 線形探索
- ALDS1_4_B: Binary Search
- アルゴリズム: 二分探索
- ALDS1_1_B: Greatest Common Divisor
- アルゴリズム: ユークリッドの互除法
- ALDS1_1_C: Prime Numbers
- アルゴリズム: 素数攻略ガイド(試し割り法)
中級: コンテスト頻出のレシピ
少しずつ「ただ書く」から「考えて選ぶ」問題に進みます。
- ALDS1_5_A: Exhaustive Search
- アルゴリズム: 全探索(ビット全探索)
- ALDS1_5_B: Merge Sort
- アルゴリズム: マージソート
- ALDS1_6_C: Quick Sort
- アルゴリズム: クイックソート
- ALDS1_10_A: Fibonacci Number
- アルゴリズム: 動的計画法
- ALDS1_10_C: Longest Common Subsequence
- アルゴリズム: 動的計画法
- 0009: Prime Number
- アルゴリズム: エラトステネスの篩
- NTL_1_A: Prime Factorization
- アルゴリズム: 素因数分解
- DPL_1_B: 0-1 Knapsack Problem
- アルゴリズム: 0-1ナップザック問題
- DPL_1_D: Longest Increasing Subsequence
- アルゴリズム: 最長増加部分列
上級: 本格アルゴリズムのレシピ
情報オリンピックや競プロで差がつく、グラフと高度なデータ構造に挑戦します。
- ALDS1_11_B: Depth First Search
- アルゴリズム: 深さ優先探索
- ALDS1_11_C: Breadth First Search
- アルゴリズム: 幅優先探索
- ALDS1_12_B: Single Source Shortest Path
- アルゴリズム: ダイクストラ法
- GRL_1_C: All Pairs Shortest Path
- アルゴリズム: ワーシャル・フロイド法
- GRL_5_A: Diameter of a Tree
- アルゴリズム: 木の直径
- GRL_4_B: Topological Sort
- アルゴリズム: トポロジカルソート
- DSL_1_A: Disjoint Set Union
- アルゴリズム: Union-Find
- DSL_2_A: Range Minimum Query
- アルゴリズム: セグメント木
- ALDS1_13_A: 8-Queens Problem
- アルゴリズム: 8クイーン問題
- 0151: Twin Prime
- アルゴリズム: エラトステネスの篩
- 0044: Prime Number II
- アルゴリズム: エラトステネスの篩
逆引きの使い方
「AOJの問題名を見たけど、どのアルゴリズムを読めばよいか分からない」ときは、このページで問題IDを探してください。
最初は正解数よりも、問題文を読んで「これはどのアルゴリズムの考え方か」を見抜けるようになることが大切です。