AtCoder では,競技プログラミングにおけるさまざまな理論やテクニックを解説する講座シリーズ「AtCoder Algorithm Lectures」を始めることになりました.
講座の内容について
講座では,競技プログラミングやその周辺の理論・テクニックを解説します.初心者向けのものから上級者向けのものまで,また,よくコンテストに出題される典型的なものからごく少数の出題例しかないものまで,幅広い内容を扱っていきます.
AtCoder Algorithm Lectures は,洗練された学習カリキュラムを完成させることを目指すものではありません.教科書・参考書というよりも辞書・事典のようなものを目指しています.競技プログラミングコミュニティにおいて,新しく発見されたり出題されたトピックも積極的に取り上げていき,長期的に内容を拡充させていきます.
2026 年 4 月時点ではまだ講座の数が少ないですが,継続的に講座を作成していき,将来的には世界一の競技プログラミング教育リソースと呼べるような,豊富で質の高い学習コンテンツ群になることを目標としています.
ただし講座では,アルゴリズムの考え方や理論の理解を重視している一方で,プログラミング言語ごとの具体的な実装についての詳細の解説は基本的には行いません.プログラミングの基礎を学びたい方は,C++入門 AtCoder Programming Guide for beginners (APG4b),Python入門 AtCoder Programming Guide for beginners (APG4bPython) などの教材や,その他の資料を参照してください.
なお,講座は必ずしも,「競技プログラミングにおいて強くなること」(コンテストで多くの問題が解けるようになること)を目指すものばかりではありません.
例えば,Union-Find の計算量上界 のように,直接コンテストで問われることは考えにくい内容でも,競技プログラミングに深く関わるものは積極的に取り扱います.また,(AtCoder Library などの)ライブラリについては仕組みや実装方法を理解することよりも,単にライブラリの使い方を覚えることの方が,強くなる上で効果が高い場合もあります.そのような場合でも,仕組みや実装方法の理解も重視して講座を作成します.
競技プログラミングの楽しみは,レーティングという数値が増えていくことだけに限られません.ひとつひとつの理論や仕組みを理解していく過程も大きな楽しみです.本講座シリーズによって,これまで以上に競技プログラミングを楽しんでもらえることを期待しています.
講座を利用する上でのアドバイス
上でも述べたように,講座は必ずしも,「競技プログラミングにおいて強くなること」を目指すものばかりではありません.
競技プログラミングで強くなるためには,本講座シリーズでインプットを繰り返すよりも,基本的にはたくさんの問題を解くことの方が重要です.表面的に知識やテクニックの幅を広げることと,それを素早く正確に使いこなせるようになることには大きな乖離があるからです.また,実際に問題を考えたりコードを書いたりするような能動的な学習は,解説を読むだけの受動的な学習と比べて,知識やテクニックの定着に大きな効果があります.
したがって,強くなることを目標とする場合には,インプットばかりに時間をかけすぎないように注意して,過去問演習を中心に学習することをおすすめします.AtCoder の過去問を解く過程でも知識やテクニックは十分身に付けられますので,安心してください.
その上で,例えば次のような講座の使い方が想定できるでしょう.
- 知らないテクニックが出てきたときに,講座によってざっと雰囲気を確認したり,仕組みを理解する.
- ある程度慣れてきたテクニックについて,講座によってより盤石な理解をする.
- 過去問演習では新しい考え方を学べる機会が少なくなってきたと感じてきたときに,講座によって学習事項を探す.
ただし,上で述べたことは,競技プログラミングで強くなることを目指すという前提です.競技プログラミングとの向き合い方で,たくさんの問題を解くことや強くなることにそれほど関心がない方も居るでしょう.そのような方は,もちろん講座での学習と問題演習のバランスなどを気にする必要はありません.
難易度目安,前提知識について
それぞれの講座には,$1$ から $10$ までの $10$ 段階で難易度目安が示されています.これは講座の大部分($8$ 割以上)を理解するための難易度を,議論の複雑さや必要とする前提知識に応じて,運営が主観的に設定しているものです.
読者の得意分野やレベルによっては難易度目安が低い講座の方が難しく感じたということはありうるので,あくまで単なる目安として利用してください.また,難易度目安は講座の内容がそのままコンテストに出題された場合の正答数を予想するものではありません.
また,それぞれの講座の冒頭には,「前提知識」が書かれていますので,これも講座に取り組む際の目安としてください.ただし,「前提知識」では,難易度目安に対してあまりにも簡単である内容や,日本の中学・高校で通常学ぶ内容については省略されている場合があります.
必ずしも,難易度目安の低いものから順に学習を進める必要はありません.前提知識が十分であれば理解は可能なので,興味のある話題を優先的に学習してみるのもよいでしょう.
実装例について
講座では,解説した内容の実装例を載せている場合があります.これらは内容理解の助けとなることを目的としています.自分で実装しようとして行き詰まったときなどに,参考にしてみるとよいでしょう.
一方でこれらの実装例は,皆さんが記事内にあるソースコードをコピーしてコンテストで使えることを目指しているわけではありません.講座内のソースコードをコピーして利用していただいても構いませんが,多くの問題に利用しやすい形でライブラリとして整理することは目指していませんし,パフォーマンスも熱心に最適化されているわけではありません.
関連問題について
講座では,解説した内容に関連する問題を紹介しています.
ただし,競技プログラミングの問題では通常,複数の事柄の理解が問われるため,必ずしも講座の内容だけから解けることは保証されません.
また,講座の難易度に比べてかなり難易度が高い問題を紹介している場合もあるので,ご了承ください.出題されているコンテスト,コンテストにおける問題順や配点,順位表で正解している人数等も参考にして利用してください.
競技プログラミングに不慣れな方は,AtCoder Beginner Contest における出題を中心に取り組み,難易度は配点から判断するとよいと思います.
解説動画について
それぞれの講座には,解説動画があります(ただし日本語限定です).解説記事だけでは理解が大変だと感じる場合などにあわせて利用してください.
Discord サーバーについて
AtCoder Algorithm Lectures では,講座に関する議論のための Discord サーバーを運営しています.以下の招待 URL からご参加ください.
招待 URL:https://discord.gg/YGcDN8hrZQ
これはそれぞれの講座の内容について,ユーザーや運営が自由に議論するためのものです.例えば,以下のような内容を想定しています.
- 講座内容に関する質問.
- 講座内容に関する誤字・脱字や,議論の不正確な部分に関する指摘.
- 講座内容に関して付け加えるべき情報の提供.
- 講座では触れられていない重要な理論や応用.
- 関連問題や参考文献であって,重要度の高いと思われるもの.
質問への回答は,運営も可能な限り行いますが,ユーザー間のやりとりで解決していただいても構いません.また,議論の内容を踏まえて講座内容をアップデートすることもあります.
日本の競技プログラミングコミュニティでは,2026 年 4 月時点では,Discord よりも X(旧 Twitter)が議論に使われていることが多いです.その中で Discord を使う判断をしたのは,議論を講座ごとに切り分けやすく,また後から見返すことが容易であるため,将来に有益な情報を残しやすいと考えたからです.ぜひご協力をよろしくお願いいたします.
なお,この Discord サーバーの用途は AtCoder Algorithm Lectures に限定されます.それ以外の AtCoder に関する問い合わせはお問い合わせフォームを利用してください.
運営スタッフ紹介
maspy
- AtCoder:https://atcoder.jp/users/maspy
- Codeforces:https://codeforces.com/profile/maspy
- 第二回 AtCoder Japan Open 優勝
自身のホームページ(https://maspypy.com/)において,多数のコンテストやアルゴリズムの解説を執筆している.また Library Checker(https://judge.yosupo.jp/)の運営メンバーとしても,競技プログラミングのレベル向上に貢献してきた. AtCoder,Codeforces などで最多の AC 数を達成したことがあり,さまざまなテクニックやその出題例に詳しい.
Nyaan
- AtCoder:https://atcoder.jp/users/Nyaan
- Codeforces:https://codeforces.com/profile/Nyaan
AtCoder の writer,tester として長く活動しており,特に,ABC(AtCoder Beginner Contest)の最終問題を通して知名度の低いテクニックの普及に大きく貢献してきた.ABC の公式解説や自身のライブラリ(https://nyaannyaan.github.io/library/)における解説は非常に丁寧で高く評価されている.
トップページ:AtCoder Algorithm Lectures