AtCoder青コーダーになりました
はじめまして、platinumと申します。
少し時間が空いてしまいましたが、10/10のHHKBコンテストで青コーダーになることができました。
今まで色変記事というものを書いたことはなかったのですが、皆さんの記事に刺激を受けて私も書いてみたいなと思いました。
簡単な自己紹介
早稲田大学で大学院生をしています。昨年の12月頃から競技プログラミングの世界に入り、AtCoderを始めました。
もともと独学でC++をある程度学習していたので、競プロでもC++を使っています。
普段は週6日、一日の半分以上を研究室で過ごしているので、あまり精進に時間をかけられていません。
ただ今年の4~6月頃は在宅研究をしていたので、そこでできた時間はかなり精進にあてました。今もその頃の精進に支えられている気がします。
ということで、皆さんとは少し違った内容になるかもしれませんが、特に「なかなか精進の時間が取れない!」という方に役立つような記事になっていればうれしいです。
精進について
青になるまでの精進記録はこちらです。(正確には青になってから少し経っています)
AtCoderでの総AC数は427です。難易度が高い問題はあまり解けていません。黄diff以上の問題が解けなくても青diffに太刀打ちできれば十分青になれると思います。
他にはCodeforcesにたまに参加したり、yukicoderで活動したりしています。
まとまった時間が確保できていないこともあって、AC数や精進グラフの値は小さめかと思います。以下では具体的にどんなことをしていたのか書いていきます。
1. ABCの過去問を埋めていく
一番時間をかけているのはABCの過去問演習だと思います。最近はARCの頻度がかなり上がっていますが今まではABCが圧倒的に多かったので、傾向をつかむためにもABCの過去問ばかり解いていました。
本当は難易度をあまり気にせずに色々な問題に触れたいですがそこまで時間を取れないので、AtCoder Problemsで難易度を見て問題を選んでいます。今のレートとだいたい同じ~少し上くらいの問題を選んで、空き時間に少しずつ考察を進めたりしていました。少し難しめの問題を一問頭に入れておいて、移動時間で考えてみることもあります。
どうしてもわからない場合は解説を見ますが、それまでの考察とかけ離れていたりとか、理解できない部分があったりなどした場合はそのまま放置することが多いです。そういう問題はACせずにとっておいて、もう少し実力がついたらまた戻ってくればいいかなと思っています。
これまでの学習について
上に書いたようにABCの過去問を中心に解いていたので、ABCにあまり登場しないアルゴリズムやデータ構造には弱かったりします。最近AtCoder Libraryがリリースされたのでいい機会だと思って勉強を始めましたが、それまでは
・セグ木/遅延セグ木は何ができるかは知っているがほとんど使ったことがない
・畳み込みは聞いたことはあるが中身は全然理解できていない
・最大流/最小費用流、強連結成分分解は名前しか知らない
・Two SATは初めて聞いた
くらいのレベルでした。正直青コーダーになった今もこれらに関してはあまり理解が進んでいません......。
これらの知識がなくてもABCでは十分に戦えると思います。ABCで頻出のアルゴリズムやデータ構造、典型問題などの精度を高めれば、あまり大きく崩れることはないと思います。継続して参加していればきっとたまに相性の良い回が訪れて、そこでレートが跳ね上がってくれるかもしれません。
最後に一番言いたいこと
あまり精進の時間が取れない中でも続けて来られたのは、ここまで切磋琢磨してきた仲間がいたこと、そしてコンテスト自体を楽しんでいたことが大きいです。Twitterで絡んでくれる皆さん、ありがとうございます。
レートが上がってくるとやはりどうしても本番で緊張してしまい、文字通り本来のパフォーマンスが出せないこともあると思います。ただそういう時こそ初心にかえってコンテスト自体を楽しんで、レートが一時的に下がっても実力がつけば長い目で見ればまた上がっていくだろう、くらいの気楽さで続けてきました。結果的にはそれが良かったのかなと思います。
これからはさらに厳しい道のりになると思いますが、この精神だけは忘れずに自分のペースで続けていこうと思っています。
長くなりましたが、ここまで読んでくださり本当にありがとうございました。