「rng_58がおすすめする練習の仕方」シリーズでは、AtCoderでadminを務めていたrng_58(りんごさん)のおすすめする様々な練習方法をお伝えします。
このシリーズでおすすめする方法は、すべてのユーザに適用できるものではない可能性があります。あくまで一例として参考にしてください。
概要
黄色レーティングを目指す人にとって重要なのは、典型問題を素早く正確に解けるようになることです。プログラミングの基礎ができているという前提であれば、それがすべてといっても過言ではありません。
競技プログラミングはレベルが上がるにつれ、「算数の問題を解く」競技に近づいていきます。とはいえ、たとえば数学オリンピックにおける A, C, G, N のような四分野がある中で、競プロはその延長として「五分野目」になるようなイメージで捉えていただくとよいでしょう。
競プロを始めたばかりの方は、まず「よくあるテクニック」に慣れることが必要です。黄色になるまでは、そうした典型的なテクニックを習得するための準備段階と考えてください。
新しい分野を始める際、理論を本で学んでから入る方法もありますが、個人的にはいきなり問題演習から始める方法をおすすめします。
AtCoder Beginner Contest (ABC) は、ちょうどこの段階の方々が例題を通じて新しい理論を学ぶことを目的としています。実質的には「教科書の例題集」として捉えてください。コンテストの成績や、自力で解けるかどうかは気にしなくて構いません。
たとえるなら、「積分」という概念を聞いたことがない人にいきなり積分の問題を提示し、その解説を通じて学んでもらうようなイメージです。最初は自力で解けなくて当然ですので、すぐに解説を読んで構いません。大切なのは、次に同じような問題が出たときに、解けるようになっていることです。
扱う題材
対象とする問題は、最近の ABC における C, D, E, F、さらに G の半分程度、および Ex のごく一部です。おすすめの書籍としては『蟻本』のような競技プログラミングに特化したものを選ぶのがよいでしょう。
プログラミングコンテストチャレンジブック / Amazonから購入
AtCoder Regular Contest (ARC) は気分転換に取り組んでもよいですが、解けなかった問題については解説を見ず、黄色になってから再挑戦するのがおすすめです。AtCoder Grand Contest (AGC) は現時点では取り組むのがもったいないため、出場は控えるのが無難です。
解き方
最終的な目標は、上述した題材(最近の ABC における C, D, E, F、さらに G の半分程度、および Ex のごく一部)を上位勢と同等のスピード・精度で自力で解けるようになることです。これができれば、ABC 卒業は十分可能です。
はじめて見る問題は、まずは自力で考えてみてもよいですが、わからなければすぐに解説を見たり、解説動画を視聴したり、人に聞いたり、上位陣のソースコードを読んだりしてください。
解法を深く理解し、人に自信をもって説明できるレベルまで到達することが目安です(AC を取るだけでは不十分です)。
解法の正当性の証明も必ず確認してください。
実装して AC を取ってください。
苦労した問題では、上位陣のソースコードを見てより楽な実装方法がないかを確認しましょう。
問題を解くときのスピードと精度は大切です。(かといって、ABC-A などを秒単位で詰める必要はありません。)
たとえば、赤色が本番で平均 5 分程度で解いている問題に 15 分かかる場合、それは理解不足や非効率な実装をしている証拠です。もしくは、大変な方針を選んでいる可能性もあります。もっと楽な方針があるはずです。
また、理解が甘いと細かなミスが増えます。コンパイルが通ったらデバッグせず一発でサンプルも通って AC もできるというレベルが理想です。
もちろん、最初からこの精度で解けるわけではありません。一度解いた問題も、忘れたころにもう一度取り組むことが大切です。バーチャルコンテストで 2400 相当のパフォーマンスが取れるレベルになるまで繰り返しましょう。
どのぐらいの diff が解ければよいか
diff はあくまで目安ですが、それ以上に重要なのはコンテストの種類です。目安としては ABC の黄色 diff 程度が解ければ十分ですが、一部難しい問題や、橙 diff にも解いておきたい問題はあるので気をつけてください。
問題を解くリズム
上述した通り、同じ問題でもよいので繰り返し完璧に慣れるまで解きましょう。
解説を見るタイミング
ABC の場合、はじめから見て構いません。
ただし、ARC の問題は出題の意図が本質的に異なります。
ABC は過去の経験や典型的な解法から問題を解くことを想定していますが、ARC はコンテスト中に自力で考えて解くことを目的としています。
そのため、現時点で ARC の問題を見て解けなかった場合、多くは本質的な考察に入る前の段階で詰まっている可能性が高く、このタイミングで解説を読むのはもったいないです。
気分転換として ARC に取り組むことは問題ありませんが、解けなかった問題については、ABC を卒業する(=黄色になる)まで保留しておくことをおすすめします。
黄色に到達した後で、改めて自力でじっくり考え直してみて、それでも解けなければそのときに解説を確認するようにしてください。
必要とされる知識
ABC を通じて必要な知識を一通りカバーできるよう設計されています。上記の学習方針に従って進めていけば、自然と知識も揃っていくはずです。