AtCoder水色になりました

regiです。遂にAtCoder水色になることができました。

f:id:regichan:20200615212014p:plain

水になったときのAC数です。

f:id:regichan:20200615212556p:plain

とりあえず冒頭で水色になるまでにAtCoderで使ったことのあるアルゴリズム・データ構造の一部を載せておきます。

この記事の本題では、私の精進方法や精進とコンテストで意識していることを書こうかと思います。(Lorentさんネタ提供ありがとうございます)

精進方法

基本的には、自分が解けそうな難易度の未ACの問題を無作為に選んで、それを解いていきます。その問題を解くとき、私は大体は以下のような流れに沿っています。

f:id:regichan:20200615221549p:plain

「大体放置」のところで「えっ?」となりそうなので補足します。個人的に、自分の実力帯では到底解けるとは考えられないくらいに難易度の高い問題を解説を参考にACするのは比較的モチベーションになりづらいと思っているため、敢えて放置しています。もちろん、自力で解けるか腕試しにその問題に果敢に立ち向かって考えてみるのは良いことですし、それを解説を参考にACすることで得られる知見や達成感も少なくはないですが、考察すらできないということは、一部の奇問を除き、大体の場合はその問題を解く上での要求される知識や基礎が身についていないということだと思っていて、そのような問題を解説を参考にACしようとなると正直気が遠くなります。やはりそういった知識や基礎は適正の問題でつけ、それから難易度の高い問題に挑戦していく方が私自身としてはモチベーションになりやすいかなと感じています。それに、その難易度の高い問題を解けてもおかしくないような実力になれたとき、未ACである適正の問題が減ってしまうため単純にもったいないです。そういうわけで私はこのような精進方法を採用しています。

精進で意識していること

主に3つあります。

 

1つ目は、AC出した後もその問題について考察することです。具体的には、「この解法は本当に正しいのか」「コードが冗長ではないか」「解説はどのような解法を想定としているか」「他の同言語のACコードと比べて実行時間とメモリはどうか」などを調べたり考えたりします。ここの考察で明らかまずかった点が見つかった場合は反省するようにして、次に活かせるようにしています。また、その問題を解く上で用いた考え方を適用できうる問題が過去に解いたことのある問題にあったかどうかも考えておくと、問題を解く上で開けられる引き出しの数が多くなるので、私はいつもやっています。

 

2つ目は、問題を初めて見てからACまでにかかった時間を測ることです。毎回時間を測ることで、自分はどういう問題の考察が苦手か、また、どういう実装が苦手かがより見えてくるため、とても役立っています。

 

3つ目は、精進を「過去最高パフォーマンスを出すための精進」と「負けても最低限確保するパフォーマンスのラインを引き上げる精進」の2種類に分けることです。私は前者を「上限を伸ばす精進」、後者を「下限を伸ばす精進」と言うのが好きなので、この記事内ではそう表現します。まず、上限を伸ばす精進とは、自分の適正難易度より"やや"高い問題を時間をかけて考えてみるという精進です。この精進をすることで、難易度の高い問題にも考え抜き実装しきる力がついていきます。次に、下限を伸ばす精進とは、自分の適正難易度の問題あるいはそれよりやや低い問題をACしていく精進です。この精進をすることで、最低限通すべき問題をしっかり通せるほどの基礎力がついていきます。このように考えることによって、どちらかが疎かになりすぎていないか、今の自分にはどちらを優先してやるべきかなども考えることができるため、とても役立っています。

コンテストで意識していること

とにかく慌てないで問題文と制約を読むことを意識しています。誤読して数十分無駄にするよりも数秒冷静にしっかり読む方が良いです...。また、考察は一度無理そうだと思った解法は一旦捨て、別の解法を考えるように意識しています。無理そうな解法をずっと考えたって大体はどうにもならないですから...。ただ、万策尽きた場合に限り、一旦捨てた解法も再び考えたりします。そして、解けそうな問題が無くなったら、各問題のAC者数を順位表から直ちに見るようにしています。コンテスト中に難易度の高い問題に時間をかけるよりかは、みんなが通してる問題に時間をかけた方が良いですし、稀に点数と難易度が合わないこともあるからです。

最後に

ここまで読んでいただきありがとうございます。できる限り私自身の考えが伝わるように努めたつもりですが、もし分かりにくい部分があったらごめんなさい><