競技プログラミングを始めたばかりの人に伝えたいこと Advent Calendar 2021の12日目の記事です。
2011年から競技プログラミングを趣味にしています。今回は始めたばかりの人向けということで、短時間コンテストに参加するときにいつもやっていることを共有したいと思います。
コンテスト一週間前
競技プログラミングカレンダー (※ 中身はGoogle Calendarなのでimportできます) の予定を見ておきます。(なお このカレンダーについての記事はこちら)
海外のコンテストで日をまたぐときは、23時頃に“予定を確認する”みたいな予定を入れたりします。
コンテスト当日
私の場合はコンテストがはじまる1時間くらい前までに仮眠が取れるのがベストです(なかなかそういうタイミングはないですが)。食事で眠くなるタイプの人は、食べて仮眠して直前に起きるのが一番かもしれません。
コンテスト直前
ペンとA4~B4の紙を何枚か用意します。私は余った紙を使っていますが、AtCoderではマス目の問題が割とよく出るので、買うなら方眼紙のノートが便利です。
準備運動として軽くストレッチします、瞑想してもいいかもしれません。
飲み物を準備してトイレを済ませておきます。あとメガネを拭きます。
コンテスト5分前くらいになったらエディタやIDEを開きます。もしatcoder-toolsなどの便利ツールを導入しているならコンソールを開いてスタンバイしておきます。
コンテスト中
問題を解きます。音がない方が集中できる人は耳栓をしてもいいかもしれません。
ちょっと悩んだら図や数値を紙に書きなぐっていきます。
複雑そうなときはNが小さいときだけ解ける愚直解を書くこともあります。提出用の解法とランダムケースで比べて、うまくいかないケースを見つけるのに使ったりします。
普通は簡単な問題から解くと思いますが、集中力はだんだん落ちてくるので、もしかすると自分が解けるぎりぎりの難易度の問題からやったほうが良いのかもしれません。試しにABC 231ではD->C->B->Aという順番でやってみました。たまたまFまで解けましたがこれのせいかどうかは不明です。
コンテスト後
良くても悪くても結果をTwitterにつぶやきます。新しい色に到達した人をお祝いします。
解説を読み、解けなかった問題を解き直します。正解していても過剰な処理をしていたりするので、改めて書き直します。コメントにアルゴリズムなどを書いておくと、あとで自分の検索の役に立ちます。私はGitHubにもpushしています。
毎回はまりがちなことは、コードのテンプレートにメモで書いておき、次回の開始時に目に入るようにします。topcoder SRMを始めたころは、こんな感じのことを書いていました。
// 問題文をよく読む
// サンプルの説明を読む
// 制約の数値は手打ちせずにコピペする
// ゼロのときだけ特別か?
// 負の可能性はあるか?
// intオーバーフローしないか?
今はEvernoteに方針のメモを残し、“桁DP”のようにアルゴリズムのタグをつけています。
ということで
良さげなtipsがあればぜひ教えてください。