プログラミング知識epsから三か月でAtCoder水色になった方法

ReiVindicatio(@RVindicatio)です.  先日のABC194でやっと水色になれたので, 自分語りをしようと思います.

自己紹介

普段は物理系(量子情報)の研究をしている修士一年です. 

普段はポーカーをしたり,  独学で行政書士の資格をとったりしています.

 

elegy-wedh133.hatenablog.com

 

elegy-wedh133.hatenablog.com

学部時代に一度だけプログラミングの授業はありましたが, それ以降研究などでプログラミングを使ったりはしていないため, 知識的には誤差程度です. 一応変数やfor, if程度の知識はあったため, 言うなればScratchでプログラミング覚えた小学生と同程度の知識だと思っていただければ大きく間違っているということはないと思います.

競技プログラミングについての知識は0でした. 素数判定や約数列挙もできなかったはずです.

一応数学については高校数学ならわかるかもしれない程度です. あと線形代数は研究によく使います.

やったこと

競技プログラミング開始~今までやったことを振り返ります. 参考までに,AtCoder problemsのAchievementとHeat Mapは以下のような感じです。

f:id:elegy_wedh133:20210307173311p:plain

f:id:elegy_wedh133:20210307173335p:plain


まあ, 競プロやってない日はないっすね、、、

開始~1週間

monkukui(@monkukui2)君に進められて競技プログラミングを始めました. 始めた動機はもう全く覚えてません. 

言語は簡単そうだったのでpythonで始めました. 灰色diffを埋めるところからでしたが, 最初はうまくいかず,こういうのこういうのの実装に一日かかったのを今でも覚えています.  実装に困ったときはmonkukui君が助けてくれたので, 序盤で詰むことはなかったです.

1週間~1か月

ABCの灰色diffをすべて埋め終わったので, 茶色diffを埋め始めました. また, はじめてのコンテストもこの時期に出ました. 割と今もそうですが, 解答が思いつきそうにないときは簡単に解説を見たりします. けんちょんさんには足向けて寝れないですね、、、

僕の場合は知識不足がほとんどだったので, ぽんぽん解説見る精進方針は悪くなかったかなあ、、と思っています. 累積和やUnionFind, BFSやDFSなどの必要な知識を蓄えていく時期でした. 

1か月~2か月

ABCの茶色diffがすべて終わったので緑diffを埋め始めました. このころ, 言語をpythonからC++に変更しました. ABC172DpythonがO(N)解答でTLEして, やってられなくなったからです.

C++はAPG4Bで学びました. 非常に短時間で競技プログラミングに必要な知識が身につくありがたいコンテンツでした. まだ4章を読んでないので, 読まなきゃな、、、と思いながら日々すごしています. 

また, 蟻本を買いました. 買いましたが, 現状ほとんど買っただけです. 難しすぎないですか?

あと確かこの時期にレートが緑になった気がします.

2か月~今

ABCの緑diffがすべて終わったので, 水色diffと青diffに取り組んでいます. 水色チャレンジで結構ぐだぐだしたので, 青色チャレンジはぬるっと行きたいものです.

ライブラリも充実し始め, セグ木やダイクストラ法, LCAなどを組みました. 

また, 2月のはじめから大学の競技プログラミングサークルに入りました. 自分よりも実力が高い人たちとバーチャルコンテストをやって解説を聞けるのは非常に勉強になっています. 

で, 何が必要

ひたすら自分語りしましたが, 結局日々の精進があったからこその今のレートだと思います.  要するに, レートを上げるためには問題を解こう!ということです. 当たり前すぎませんか?

付け足すならば, 師匠がいたのも続けられた要因でした. 何度もバグらせたコード送りつけるたびにデバッグしてくれたmonkukui君には, この場を借りてお礼申し上げます. ありがとう.

次の目標は, 半年で青になることです. 現状実装速度に難をかかえているので, その部分を改善していくつもりです.

さいごに, 大学の競技プログラミングサークルで新歓やります. この記事を見て競技プログラミングに興味をもった方は, ぜひTwitterなどでの告知を参考にしてみてください.