Port 53

明日のための技術メモ

AtCoder 茶色になるまでを振り返る

茶色になりました

f:id:saturn-glave:20200607200904p:plain

f:id:saturn-glave:20200607201752p:plain

2020年5月30日のNOMURA 2020コンテストでついに茶色になりました。
AtCoder始めたのが2019年3月30日のエクサウィザーズ2019コンテストだったので、
ちょうど1年2ヶ月で昇格。

目次

競プロを始めたきっかけ

学生時代も情報系だったけど、あまりごりごり実装したりコーディングするのは、
そこまで得意ではなかったし、計算量を考えて書くこともあまりできてなかった。
そんな自分を変えたかったのと、社会人3年目終わりで色々と技術面で成長が伸び悩んでいたのもあり、 このままのキャリアでいいんだっけとたくさん思うことがあって当時の環境から抜けたかった。
言語は、C言語が苦手だったので、学生の時に慣れていたPythonを触ることにした。
(学生時代はPython2だったが、データサイエンスのことも考えこれを期にPython3にした)

そんな時、C++が大好きな学生時代の同期が、競プロで楽しそうにしているのをふと思い出した。
当時自分は、競プロは結構ガチな人がやるものだと思っていた。
でもAtCoderを見て、別にC系じゃなくても好きな言語でやってもいいんだと分かった。
それで大分敷居が下がったと思う。もう少し早く知ってたら良かったと思った。
(自分の場合、必ずしも赤色になることは目標ではないです。今の時点で。)

おかげで、毎週末は21時からコンテストに出て、結果に一喜一憂して、
毎日そのために1日1問解く生活になった。
まだ全然下手くそだけど、それなりに自信もついてきて、結構充実している。

茶色になるまでにやったこと

やったことは以下の通り

  1. 毎週できるだけコンテストに出る。出られなくても必ず問題は解く
  2. 過去問 ABCのA問題をすべて、灰diffをできるだけ解く
  3. ABCのAB合わせて5-10分以内で解けるようにする
  4. 簡単な全探索、貪欲法を書けるようにする

毎週コンテストに出る

とにかく出ないことには始まらない。
もし心配であれば、AOJのITP1や、ALDS1を少しつまむと良いと思った。

もし用事と被って出られなくても、最近はバーチャル参加もできるので、
それを活用してもいいかなと思う(私はやったことないけど)

onlinejudge.u-aizu.ac.jp

過去問を解く

f:id:saturn-glave:20200607203148p:plain

無理しない範囲で、ABCのA問題すべて、B問題の灰diffをできるだけ解いた。
※旧ABC(4問制)だとBでも結構難しい問題が出るので、それは無理しない。
少し余裕が出てきたら、ARCやAGCの灰diffのA問題もやって良いと思う。
あとは企業コンの灰diffなど。

記録用に、AtCoder Problemsがモチベーション維持に役立っている。
いつSubmitしたかも記録してくれていて、連続何日、とか分かるのも嬉しい。
最近は、初級・中級・上級に向けて問題セット100問ずつもセレクトしてくれていて、
本当にすごすぎるサイト。

https://kenkoooo.com/atcoder/#/table/

ABCのABを合わせて5-10分以内で解く

これ大事。
パフォーマンスという数字によってレートの上げ下げが変わってくるので、
A, Bの早解きができるようになっておいた方が良い。
(C問題以降にかけられる時間を稼ぐ意味でも。)

これができるようになるために、過去問で量をこなすことが大事。
ABCのA,B問題は、あまり深く考えず、問題文にあることを素直に読んで、
その通り実装できればACを取れることが多い。

全探索と貪欲法

C問題になると出てくるイメージ。
for文やitertools.permutationなどで全探索をすること、貪欲法に慣れること。
人によっては、過去問をアルゴリズムごとで紹介してくれている方もいるので、
そこから自分で組んでみると良い。

緑色に向けて

次はレート800の緑色を目指すことになります。
蟻本を活用しつつ、bit全探索、DFSやDPなど、スムーズに書けるように頑張りたい。
また、PASTで大爆死したので、数学系の問題や、計算量を考えないといけない問題に
太刀打ちできるよう、精進を続けます。

そして今後も、競プロを楽しく続けていきます!