rxiveのブログ‐競プロとか数学とか日記とか

競技プログラミングとか数学とか日記

Atcoder緑になりました【色変記事】

f:id:rxive:20201125222116p:plain
 先日のABCで入緑したので界隈恒例の色変記事を書いていきたいと思います。

初めに

 私が初めて競プロのコンテストに参加したのは2020年5月30日で、11月22日のABC184にて緑になることができました。
プログラミングはゼロからのスタートでしたが緑になることを目標に半年間続けてきました。目標を達成して区切りがついたということで、緑になるまでにやったことと思ったことをまとめておきたいと思います。

自己紹介

 参考までに競プロを始めた時点でのスペックを書いておきます。

  • 理系大学院生(非情報系)
    • 高校数学は数IIIまで学習済み
  • プログラミング経験なし
    • if文for文聞いたことあるな程度。

プログラミングできないので典型的なアルゴリズム問題が苦手で数学的な考察だけで解決できる問題のほうが得意です。

灰色(0~399)の時にやったこと

 まず入出力もできなかったのでAPG4bで勉強しました。2章までやればAB問題くらいまでは解けるとのことだったので2章まで確認した後コンテストに参加しました。その後は以下の内容を行っています。

  • 毎週コンテストに参加する

 参加回数が少ない(14回以下?)とレートが低く出るのでABCが開催される時には必ず参加した。ABC相当の企業コンにも積極的に参加して参加回数を稼ぐと同時にモチベーションを維持するようにした。

  • 文字列や配列、他よく使うものの操作をすぐに確認できるようにした

 解法を考える時間よりもコードの書き方を調べる時間のほうが長かったため、使うたびにメモしたりまとめのブログ等をブックマークしたりした。すべて覚えずに方法があることを知っていればよいというスタンス。

  • 過去問を解く

 Atcoder Problemsで適度な難易度の過去問を解いた。

 特に最後の問題を解くことが一番大事だと思います。毎週末しかコードを書かない状態では不慣れなままコンテストに出続けることになって伸びないし、さらに出会う問題のパターンが限られているため成長しにくいと感じました。難しすぎると何も理解できないので頭を使って解けるか新しい知識がつくようなものがよいし、虚無埋めは面白くなさそうなのでやってません。Training のeasy100問解いたらC問題にも手が出せるようになり、数回後に茶に突入したので間違っていないはず。

茶色(400~799)の時にやったこと

 灰色の時代とあまりかわりません。知識面の拡充と過去問演習を地味に続けていたら少しずつ伸びて緑になったという感じです。最近はABCの3完かたまにプラスでDが解けていた感じです。解けそうだった問題は解説を読んで振り返っています。
 知識面で増えた内容はtupleやabs他、「累積和」と「しゃくとり法」です。緑色になるには~水色になるには~系の記事を参考に少しだけ増えました。標準ライブラリ、便利ですね。累積和、よく使う和はあらかじめ計算してメモして持っておくと便利、なるほどです。実際とても便利でうまく使うと計算量が減ってTLEしにくくなるので何かと組み合わせてよく使います。知っててよかった累積和。一方でしゃくとり法は累積和ほどの使用頻度はない気がします(個人の感想です)。今のところこれくらいしか記憶にありません。気づいていないだけで世界にはしゃくとり法がたくさんあるのかな。

 プログラミングとして勉強していないだけで約数・素数・整数関連の内容はたぶんできると思います。中学・高校数学ができてある程度の考察力があればなんとかなります。できないとC問題以降で苦労しそうな印象が強いです。やりましょう。
 数学と考察ができる代わりに私は文字列が苦手です。文字列の操作はあまり出題しないでほしいなあ。

今後の目標

 緑の次は水色コーダーになれたらよいと思います。1年くらいかかるかもしれませんし、もっと先かあるいは緑のままかもしれませんが目標にしておきます。
 今後勉強する内容として、

あたりを考えています。ブログの内容も自分なりに初等数学やアルゴリズムに触れられるようにしていきたいという気持ちはあります。やれたらやる。

参考にさせていただいたサイト

 最後になりますがこれまで利用して大変参考になった役に立つサイトの紹介をもって感謝の意を表します。ありがとうございました。