AtCoderでPython使いが茶色になるまでにやったこと。
この記事では、AtCoderで茶色になるまでにやったことを紹介していきます。
目次:
- 自己紹介
- 競技プログラミングを始める
- 初コンテストに参加する
- とりあえずABCには参加する
- ABC142で四完を達成する
- きりみんちゃんを見る
- ライブラリをつくる
- AtCoderProblemsの新ABCを埋める
自己紹介
今回のABC148で無事茶色になれた名無しのマイナーです。 茶色になるのは思っているよりも高い目標で、ここに来るまで五ヶ月がかかりました。
ABC148では簡単な問題が多めでしたが、そうであるからこそ練習量が生きたとも思っています。
競技プログラミングを始める
もともと、仮想通貨関係のプログラムを趣味で書いており、プログラミングはある程度していたのですが、 競技プログラミングは名前を聞いたことがある程度で、本格的にしたことはありませんでした。
ですが、Twitterを見ていると
★競技プログラミング★
— Lillian (@Lily0727K) 2019年8月4日
AtCoder Beginner Contest 136
65分5完で221位
パフォーマンス:1991
レーティング:1569→1624
念願の青色に昇格しました!(≧▽≦)
とりあえずの目標だったので、無事に達成できて嬉しいです! pic.twitter.com/m1i4ajO7qm
というTweetが目に入り、「五ヶ月で青色」という圧倒的事実に惹かれ、競技プログラミングをはじめました。(今思うと、5ヶ月で青色がすごいとなぜ五知っていたのかは謎)
初コンテストに参加する
今でもなんとなく覚えています。 初参加したコンテストはAtCoderBeginnerContest 136でした。
A問題とB問題を標準入力の方法をググりながらもACしました。 しかし、C問題が解けませんでした。
解説放送を見ながら納得したのを覚えています。 ちなみに、ついたレートはでした
とりあえずABCには参加する
とりあえず参加していました。 純粋に楽しいし、解けない問題が解けると気持ちいいからです。 この期間は解けなかった問題の解説を見る程度の勉強をしていました。
ですが、コンテストのために精進するほどモチベーションはなかったので、あまり精進はしませんでした。
ABC142で四完を達成する
D問題は整数に関する問題でしたが、初めてD問題をコンテスト中に解くことができました。 このあたりで、コンテスト中にググることの大切さを学んだ気がします。
きりみんちゃんを見る
バーチャル幼女プログラマー(7歳)として、AtCoderの過去問を解く配信をしているVtuberの「きりみんちゃん」という方がいるのですが、 彼女も当時の僕より少しレートが高いぐらいで、勝手にライバル認定していました。
配信を見ながら並走して解くと、自分が先に解こうとする競争心が働くのでいい感じです。 彼女はたぶん僕より実装力は高いですが、数学力は僕のほうが高いです。
また最近は数学的傾向の強いコンテストが多いので、僕がきりみんちゃんを抜かせたんだと思います。(といっても50も差はない)
ライブラリをつくる
Pythonはとくに、もともとあるライブラリなどが多いので(fractions.gcd()など)、C++を使っている方々よりは、ライブラリの必要性は下がると思うのですが、 それでもやっぱりライブラリがあると便利です。
具体的にあるライブラリを列挙すると
- 条件の二分探索(年齢あてゲームなどで使うアレ)
- 二次元リストの回転 (行と列をListでとれるようになる)
- bit全列挙
nCk mod p を素早くやるアレ 参考: よくやる二項係数 (nCk mod. p)、逆元 (a^-1 mod. p) の求め方 - けんちょんの競プロ精進記録
文字列から部分文字列を探し、その部分文字列が始まるindexを返す関数(AtCoderのPythonは3.4であるため、find関数がつかえない)
とかですね。 いわゆる「貼るだけ」問題もABCのB問題やC問題に存在したりするので、少しでもパフォを上げたい灰色の方にはおすすめです。
AtCoderProblemsの新ABCを埋める
AtCoderProblemsというAtCoderの過去問をまとめて見れるサイトがあるのですが、そこで新ABCの過去問を解いていました。 茶色を目指すだけだったら、新ABCのA,B,Cだけを埋めるだけで十分だと思います。
ちなみに、僕は最近やっと100ACいきました。
また、「攻めの精進」と「守りの精進」という考えたもあるようです。 自分が明らかに解ける範囲のDifficultyの問題を解いて、基礎や知識を固めることを「守りの精進」、 ギリギリ解けるかわからないラインの問題を解いて考察力などをつけることを「攻めの精進」とするそうです。
守りの精進をすることによって、コンテスト中のパフォーマンスが安定し、 攻めの精進をすることによって、パフォーマンスの最大値があがるそうです。
継続的な精進だけでなく、戦略的な精進が求められそうです。
日々是精進!