2025年5月10日開催のAtCoder Beginner Contest 405 (ABC405) に出場し,入緑することができました!そこで私が緑色になるまでにしたことをまとめてみたいと思います.
筆者について
情報系(数理)の修士1年生です.Pythonをはじめとして,プログラミングの経験が2,3年程度あります.数理と関連分野(グラフ理論,最適化,アルゴリズムなど)の知識は多少ありますが,競プロは初心者です.AtCoderは2年前(2023年1月ごろ)に3回ほど出たことがありましたが,すぐに辞めてしまいました.2025年1月に再開し,再開後15回目のコンテストで緑色になれました.なお,AtCoderではPythonを使っています.
基本的な戦略
AtCoderのレートを伸ばすには,以下の2つの戦略があります.
- 今解ける問題を,速く解く
- 今解けない問題を,解けるようにする
筆者は,灰〜茶は2の戦略が,茶〜緑は1の戦略が有効だと考えています.
なぜなら,ABCでは,C問題とD問題の難易度差が大きく,解いた問題数で高いパフォーマンスを達成するのは難しいという実感があったからです.
実際,AtCoder-standings-difficulty-analyzerというツールを使って,毎回のコンテストで自分が解いた問題の難易度と自分のパフォーマンス推移を確認してみることでも,それがわかりました.
というわけで,茶〜緑の区間では,C問題(もしくは簡単なD問題)までの速解きを意識していました.
ちなみに各回のパフォーマンスや解けた問題数はコンテストの難易度によって変わるので,それらを実力の指標にしてしまうと,精神衛生上も良くないです.あくまで参考程度にすると良いと思います.
緑色になるまでにしたこと
灰色から緑色になるまでに,合計で約120時間程度かかりました.その内訳は以下の通りです.
- ABC出場と復習,その他ABC問題演習など:約82時間
- 鉄則本:約38時間
灰色から茶色になるまでにすでに約65時間かけているので,実質的には茶色から緑色になるまでにかかった時間は約55時間程度です.ですが,その内訳は少し異なります.灰色〜茶色の間では,主に書籍「競技プログラミングの鉄則」(いわゆる鉄則本)を主に学習していた一方,茶色〜緑色の間では,主にABC問題を解くことに時間をかけていました.実際,時間別に見るとそれがわかります.
時期 | 内容別の時間(h) | 合計(h) |
---|---|---|
灰〜茶 | 鉄則本 25/ ABC 40 | 65 |
茶〜緑 | 鉄則本 13/ ABC 42 | 55 |
合計 | 鉄則本 38/ ABC 82 | 120 |
次に,それぞれの内容について詳しく説明します.
ABC出場と復習,その他ABC問題演習など
基本的に,毎週コンテストに出場していました.毎週のABCでは,出場するだけでなく,終わった後に復習も行いました.復習では,AtCoder Problemsの難易度水色以下の問題を解き,解説などを見ながら自分でACできるように努めました.ABCには解説放送というものがあります.解説放送では,問題の解答だけでなく,正解に至るまでの過程が解説されるので,とてもおすすめです.出場していない分のABCについてはあんまり解いていませんが,Educational DP Contest / DP まとめコンテストは2問解きました.
前述のように,茶〜緑の区間では,C問題(もしくは簡単なD問題)までの速解きが大切だと感じたので,あまり難しい問題を解くことはしませんでした.
鉄則本
鉄則本では,競プロで必要なアルゴリズムやテクニックを網羅的に学習できます.私は鉄則本の例題のみを解き進め,現在は最後の総合問題を除いてすべて解き終えました.例題を解くときには,できるだけ自分で解いてみるようにしています.解けないときは,解説を見て,理解した上で自分でACします.基本的なアルゴリズムやデータ構造が網羅されているので,初心者にはおすすめです.ただし,分野別の縦割りにしている関係で,難しいトピックもいくつか扱われています(LIS,文字列のハッシュなど).筆者も,「これは初見じゃ絶対に解けない...」と苦しんだ問題も多々ありました.そのため,1週目には難しい問題(例えば難易度星5の問題)は飛ばしてもいいかもしれません.
逆に,緑になるための道具としては十分すぎるほどのトピックが網羅されていると感じました.この本で道具を揃えた後に,ABC問題を解くことで,演習を積む戦略が良いと思います.(筆者もこの戦略で緑になれました)
AtCoder Problems 統計情報
最後に,AtCoder Problemsの統計情報を載せておきます.
今後の目標
「入緑おめでとう!次は入水.」と自分に言いたいところですが,ひとまずの目標を達成できたので,少しペースを落とします.ただ,水色になるには確実にD問題を解けるようにする必要がある(速く解くのではなく,1問多く解く)ので,地道にアルゴリズムを学習していこうと思います.レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】に載っている「分野別 初中級者が解くべき過去問精選 100 問」を解こうかなと思っています.