引退&これから参加する人へ

今回のが2回目の世界大会だったので、もうこれで引退となります
自分は大学に入ってICPCに出会ったのがプログラミングコンテストに参加し始めたきっかけとなったこともあり、数あるコンテストの中でも一番気合を入れていました
今年こそは金メダルを取りたいと思っていましたが、最後の最後でミスをしてまたしてもメダルなしに終わってしまい、期待に応えられずとても申し訳なく思います
非常に悔しいので、敗因を分析して、これから参加する人たちの役に立てればと思います


まず、今年の自分たちの戦略について
うちのチームは自分ときたまさの二人コーダー体制で、それぞれ得意分野の問題を担当します
解法の分からない問題は、相談しあって考えます
解法が分かった問題は適切なコーダーに割り振ります(1問を解くにあたってもこの部分は任せた、みたいなことをします)
コーディングはこまめに交代しながら行い、ちょっとでも考えたくなった瞬間に交代します
この際に印刷では時間がかかるので画面を二分割します
ペアプロは実装の重い問題以外ではあまり行わず、デバッグは終盤以外基本的に紙面上で行います
とれないバグは終盤まで放置して次の問題に行きます


最近はチーム練習にロシアのSGUというジャッジを使っていて、この戦略でいい感じにいっていました
ロシアのセットなどでは、数学問題やアルゴリズムさえ分かれば組むのはそんなに大変じゃない問題(TopCoderで出そうな問題)が多く、いい感じに交代しながら問題を解くことができたのですが、今回の世界大会では実装の重い問題しかなく、きたまさの担当する問題がなくなってしまいました
というか、ロシアのセット以外、数学問題やアルゴリズム考える問題なんてあまり出ないので、探索・幾何・構文解析・シミュレーションといった実装ゲー練習をした方が良かった気もします


正直、このような問題セットの傾向の違いは非常に重要だと思います
例えば、OBOG会の合宿や、この間の冬コンテストなどでは自分たちや_(ryと、その他の国内チームの間にすごい差がつきました
一方、東京大会での成績にはほとんど差はつきませんでした
考える問題の少ないセットでは、確実にコーディングがボトルネックになります
今回も、特にはまっていたわけではないのに、気がついたら残り2時間とかになっていました
oxyさんとも話していたのですが、解法のアウトラインを考えることと、実際にコードにすることの間にはかなり開きがあり、組み始めてから、ここどうしたらいんだろう、とかいうことになることはよくあります
この部分を埋めて、実際にコーディングを始める前に、実装方法の詳細について考える練習をするといいのかもしれません
また、解法がわかっていても、チームメイトと楽な実装方法について議論するといいのかも


自分たちのチームは結構実装ゲーに強いイメージが持たれていたみたいですが、実装ゲーの練習するのはあまり好きではないので、コンテスト中に解けなかった実装ゲー問題とかをけっこう放置していましたが、これが良くなかったと思います
例えば、ロシアのチームは合宿で日本から持っていった空間幾何の最終防衛ライン問題を終了後にがんばって解いていました
こういったのの積み重ねで実装力がつくのではないでしょうか
日本のICPCの問題もOBOG会みたいに考える問題が多くなればいいのに、とかよく言っていましたが、もうICPCというコンテストはTopCoderGCJとは別物であると割り切ってそれ用の練習をしないといけない気がします


コーディング量が多いセットではチームワークが非常に重要だと思います
今まで個人練習ばかりだったのを改め、今回はチーム練習をしっかり行うようにしました
1月は毎週末2セットの練習を行いましたが、それでもこれで十分だとは思えません(とはいえ、キャンパスが違うのでこれ以上練習するのは不可能で、どうしたらよいか分かりません)


というわけで、今なら次の戦略をとります
二人or三人コーダー体制
問題読んだら解法が分かっていようと相談して楽な解法を考える
画面分割して数分おきくらいで交代しまくりながら組む
ペアプロとか遅くなるのでいらない、むしろコーディングしてないときに解法の相談してバグってないかチェック


1問30分で解くのは大変でも、5分コーディング10分考えるを6セットやれば解けるに違いない!?
きっと_(ryならやってくれるに違いないと期待しておきます