エンジニアのブログです。

AtCoder 水色になるまでの1年の振り返り

Posted at

コンテスト参加56回目のAtCoder Beginner Contest 191でレートが1219(水色)になりました。[コンテスト成績表リンク]

ここでは水色になるまでの精進の振り返りと、レートを上げるための少しのアドバイスを書き記します。

水色になるまでに解いた問題

  • AtCoder: 931問 (diff茶~水をほぼ全埋め、靑を100問程度)
  • LeetCode: Easy 35問 & Medium 260問
  • チャート式: 靑色 1A/2B

1年間でこれぐらいの問題に取り組みました。AtCoderは解き直しを含めると1000問は超えています。

自分は一時期レートの伸び悩みで嘆いていた時期があったのですが、水色の人たちを見てみると自分よりも問題数をかなり解いていることが分かり、とりあえず解きまくろうとひたすら精進しました。AtCoderは800~1200問解けば60%の人が水色になるそうです。先のツイートによれば解いた問題数とレート値がほぼ比例しているので、精進量はある程度裏切らないことが分かります。

また高校数学の復習として青色のチャート式1A/2Bを買って一通り解きました。特に組み合わせ論や整数論、数列の問題はAtCoderでも役立つ知識が多いです。

解説ACと自力ACのどちらを選ぶか

自分は水色になるまでは、とりあえず10分で解法の道筋さえ立てられなければ積極的に解説ACをしていました。というのもコンテストに参加していく中で、まず水色以下で求められるようなアルゴリズムの全体像を掴むことが必要だと感じたからです。

水色以下の過去問をほとんど解いた今では、アルゴリズムよりも考察力が必要だと感じているので、今は解説ACをほとんどしていません。1時間ぐらい考えを凝らして、それでも解けなければ解説ACという感じです。

このように今の自分に何が足りていないかを考えて、柔軟に考察時間を調節することが自分にとって上手くいっています。

Notionでタグ付けして復習が便利

解いた問題を半年前からNotionというメモアプリに記録しています。Notionはデータベース機能を備えており、各問題に対して「解けたかどうか」のフラグや自由なタグ付けが可能です。

それらを利用して、解けなかった問題だけを列挙したり、指定のタグの問題だけを列挙したり出来ます。例えば桁DPが解けない!となれば桁DPタグが付いているものを集中的に解いて身につけます。今の自分は数学系の問題を弱みに感じているので、数学タグが付いているものを集中的に復習しています。

あとはメモ欄に「どこまで考察できたか」「どうすれば解けたか」などの反省点もなるべく書くようにしています。これを書いておけば、復習時に過去と比べてどこが成長できたか、逆にどこが成長できていなかったかを反省できます。

ライブラリ整備で勉強と本番活用の一石二鳥

水色になるまでに、ライブラリ化による恩恵を受ける機会がたくさんあります。例えばABCでは巡回セールスマン問題がそのまま出題されたり、グラフ理論の典型問題を言い換えただけの問題が出題されたりします。そのような問題を素早く解くことで、普段よりパフォが大きく伸びることがあります。

なのでライブラリ整備をしましょう。ライブラリ化の過程でアルゴリズムの勉強が出来ますし、アドホックな要求をされても容易に実装できようになります。自分は純粋にライブラリ化する作業が好きなので、同じレート帯よりも整備できている方だと思います。

自分のライブラリはGitHubで公開しているので、C++使いの方はよければ参考にしてください。github.com/hareku/cpp-algorithm

競プロを頑張るモチベ

最後に自分がなぜここまで競プロを頑張れたのかを振り返ります。結論を言うと、コンテストなどで成長を感じたときの喜びがモチベの貢献として一番大きいです。AtCoderはツンデレなので滅多に「解けた!」は届けてくれませんが、それでも精進して待ち続ければ届けてくれます。

とはいえ誰でもモチベーションを失う時はあるでしょう。自分も途中でスランプに陥って1週間ほど競プロをしなかった時期がありました。コンテストで冷えたことで1日中気分を損ねていることも多々ありました。

そのような苦境で粘れたのは「自分がこのレートに収まる器な訳がない」というある種のプライドのような存在のおかげです。ぼろぼろの負けたままの気持ちで競プロから撤退するのが許せなかったので、今まで立ち直れて来ました。

今も水色で満足していないので、このまま成長を楽しみつつ、プライドを頼りに精進し続けます。


About me
Creative Commons License

This blog's source code is published on GitHub.