文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

わたしの競プロ勉強法

私は主に AtCoder, yukicoder, AIZU ONLINE JUDGE を利用して競プロの学習をしています。現在の学習状況はというと、AtCoder は100,200点問題を全AC・300点問題を半分ほどAC、yukicoder はレベル1問題を全AC、AIZU ONLINE JUDGE はまあそれなりといった感じです。


今回の記事では、それらのサイトにおける私の取り組み方について紹介したいと思います。



解けそうな問題なら、とりあえず解く

いまは AtCoder の300点問題を中心に取り組んでいますが、片っ端から問題を眺めていって、もし自力で解けそうなら、とりあえず解いてみます。苦手な数学系の問題や、高度なアルゴリズム系の問題など、一目で解けそうにないと分かるような問題は、基本的には解きません。



自力でACできそうにないなら、すぐに解説を見る

5~10分程度取り組んでみて、ちっとも解法が思い浮かばなかった場合には、すぐに解説を見ます。いや自分で考えてこそ力になるんでしょうが、というお言葉もあるかもしれませんが、以前、そうやって自分で考えて進めていった結果、一問あたり6時間、7時間と溶かしてしまった経験があるので、難しいと感じたときには、潔く投降することにしています。



解説を見てもわからないなら、解説されているサイトを巡る

こんなことを言ってしまうのもなんですが、競プロの問題の解説は、ときに、初心者にあまり優しくないようです。「やるだけ」や「省略する」などの言葉が散見されることもあります。そうでなくても、公式に用意されている解説だけでその問題を完全に理解できるという人のほうが稀でしょう。そんなときは問題を解説してくださっているサイトを巡礼して、問題を解くための手掛かりを探します。



解説サイトを見てもわからないなら、他の人が書いたACコードを見る

私がよく見るのはコード長が最短の提出です。良い意味で魔術的なコードが見つかることもありますが、そのようなものを除いて、他の人のコードは参考になるものばかりです。他の人のACコードを見てもまだ解法がわからないという場合は、最終手段として、そのACコードを参考にして実際にコードを書いていきます。いわゆる「写経」というやつでしょうか。コード丸写しはできるだけやりたくないので、最低限、一行ずつ理解してから書き写していきます。



問題を解いた後、理解が足りないと思ったら、ブログ記事にする

ブログ記事にするためには、ある程度、コードも解法も整っている必要があるので、十分に理解しないまま何となくACしてしまった問題や、満身創痍の状態でかろうじてACできた問題の理解を深めるのにうってつけです。文系だから……というのは関係ないと思うんですが、私は、問題を数式やコードではなく言葉で理解したいタイプなので、ブログ記事にすることで思考がずいぶん鮮明になるみたいです。



要するに

何も考えていません。計画を立てるのが苦手なので、本ブログにいつもはてなスターをつけてくださっているやなぎさんのように、綿密な計画と分析でもって進めるということが生来できていません。現段階では問題を解く楽しさとコードを構築する楽しさだけで競プロをやっていますが、まあ楽しければそれでいいかという精神でマイペースに進めていきたいと思っています。まずは、AtCoder の300点問題全ACから。