AtCoderで水色になるまでにやったこと

 ブログを読んでくれてありがとうございます。

 少し前にAtCoderのレートが1200を超えて、いわゆる「水色」レートに到達しました。(レート推移やパフォーマンスはこちらhttps://beta.atcoder.jp/users/wakuwinmail/history

  今回は、私がレート1200に到達するまでやったことを色々と書いていきます。

 

初参加まで

 私が初めてAtCoderで参加したコンテストは2016年9月24日の「CODE FESTIVAL 2016 qual A - AtCoder」でした。まず、私の競技プログラミング以前のプログラミング歴について書いていきます。「苦しんで覚えるC言語 - 苦しんで覚えるC言語」というサイトを参考に、特に誰かに教えてもらうわけでもなくC言語の勉強をしていました。その後、DXライブラリ(http://dxlib.o.oo7.jp/)というものを使ってゲームを作るためC++について勉強していました。コードを書くことに抵抗はなく、バグやエラーが出た時に自力で検索して解決する程度のことはしていましたが、特別にアルゴリズムの勉強はしていませんでした。そんな中で、プログラムを書く練習として競技プログラミングをやろうと思ったわけです。

競技プログラミングを始めてみたが

 実際に、このくらいの経験でどのくらいの成績が出たのでしょうか?確認してみると、AtCoder初参加の成績はパフォーマンス1477でした。パフォーマンスというのは、簡単に言うと「そのコンテスト1回に限ったAtCoderレート」のようなものです。つまり、初参加のコンテストの時点で1200以上のレートに到達できる可能性は既にあったわけです。しかし、当時の自分はパフォーマンスの存在を知らず、またAtCoderの仕様である「参加回数が少ない内はレートが(パフォーマンスに比べてかなり)低くなる」ということも知りませんでした。2回目、3回目に参加したコンテストの成績もあまり良くなく、競技プログラミングを楽しいものとは考えていませんでした。2016年のJOI予選が終わると、私は競技プログラミングへの興味を失っていきました。

競技プログラミングへの興味

 競技プログラミングそのものは頭を使う数学パズルゲームのようなものです。なので、ちゃんと勉強していけば面白いだろうなとは思っていたものの、時間が取れずにいました。AtCoderの過去問を解くなどしてプログラミングをしっかり勉強するようになったのは2018年の3月ごろからでした。そして、過去問を解くようになると競技プログラミングの面白さを実感するようになりました。この時はC++ではなく当時興味を持っていたPythonRubyを使用していました。

本格的な練習

 2018年4月頃からは大学内のサークル活動に参加するようになり、ACM-ICPC 国際大学対抗プログラミングコンテストに向けた練習のためC++でコンテストに参加するようにしました。サークル活動では1回2時間ほどの模擬コンテストを週に2回行っていました。この練習のおかげか、以前のブログにも書いたようにACM-ICPCではチームとして国内予選を通過することができました。20118年の8月以降はAtCoderのコンテストに毎週参加し、JAG夏合宿や会津合宿などの競技プログラミング関連のイベントにも参加しました。過去問を多く解いたわけではないですが、コンテストに多く参加することで慣れてきたのかもしれません。2018年8月18日のABC106「https://beta.atcoder.jp/contests/abc106」ではパフォーマンス1600となり、その後も徐々にレートを伸ばしていきました。ABCの300点問題を確実に、10分以内に解くことでパフォーマンスが1200を超えてきた気がします。

まとめ

 これは、競技プログラミングの上達に限った話ではないですが、問題を解いて慣れてくると何事も成績が良くなります。私の体感としては、コンテストに慣れてきたら10分以内に解ける問題は解いてもあまり実力が上がらない気がします。コンテストや競技プログラミングの問題に慣れていない内は簡単な問題を解くだけでコンテストでの成績は上がります。水色を目指すなら大半の300点問題は(実装も含めて)10分以内に解けるようになると良いと思います。

 

【11/7追記】

『水色を目指すなら大半の300点問題は(実装も含めて)10分以内に解けるようになると良いと思います。』の部分についてです。

大半の、と表記しましたが基本的にはABConly(ARCと同時開催されてないABC)の300問題を指しています。

また、この記事を書いている時の直近のABC-Cには難しい(もしくは実装が重い)問題もあります。そのような問題を10分で解く必要はありません。10分というのは、慣れてくるとこのくらいの時間で解けるようになる、という目安の数字と思ってください。