Hatena::Grouptopcoder

kohyatohの日記

 - 非数学系な人のTopCoder参加記です。

2011-12-13

team WAKABAでした練習のまとめ

| 00:32

この記事はCompetitive Programming Advent Calendar 13日目の参加記事です。

ICPC2011にteam WAKABAとして参加し、チームで練習して結構良い感じだったので、そのまとめです。

(1)具体的に何をしたか?、 そして (2)得られた経験則(効率のよい練習/努力の報われない練習について)と続きます。

競技プログラミングにはある程度慣れたけど、伸び悩んでしまった、というような人に読んでもらえると幸いです。


ちなみに、team WAKABAのメンバーは、練習開始時(2010年7月頭)からICPCアジア地区予選直前(2011年11年頭)で、

OgieKako: 2116 -> 2766

rankalee: 1592 -> 2027

kohyatoh: 1548 -> 2314

TopCoderのレートがインフレしたので、割と効果のある練習だったと思います。*1


(1)具体的に何をしたか?

Tracによると、第一回練習は2010年7月11日でした。

夜10時頃にTopCoder上のアリーナに三人集まり、毎回1時間15分+5分+15分の模擬SRMをしました。

これを2011年4月ぐらいまでで計109回やっています。

自分の場合、最初の頃は500は手も足もでなかったのですが、他の人のコードを見たりしながら、だんだんと解ける気がするようになってきました。


その後国内予選が近づくと、日曜日に集まって5時間コンテストを解く方向にシフトしました。

このときはSGUのvirtual contestsを使っています。

時間切れのあと、解けなかった問題を議論したり、自分以外のチームメイトが解いた問題について教えてもらったりしていました。


なんとか国内予選を突破した後は、TCOやらの問題を解いたりしていました。


夏休みは、上海交通大学の地獄の合宿のように追い込みをする絶好の時期ですが、(主に自分のせいで)なかなかチームの予定が合わず、あまり練習できませんでした。申し訳ないです...


本格的にリブートしたのはOB/OG会の夏合宿以降で、ICPC地区予選をかなり意識した練習をやりました。

予定の合う夜には集まって幾何問題を解き、日曜日に本番過去問、OB/OG会の過去問を本番形式(3人でパソコン1台)でやりました。


そして迎えたICPCアジア地区予選、来年は大物チームがでるとの情報もあり、世界に行けるとしたら今年しかない!という覚悟で望みました。

.

.

.

...結果は惨敗。世界は広いのでした。(ていうかレートが3人合計で7500あるチームとか、白い恋人のいるチームとか無理です...)


ただ、個人としては実力を出しきった上での負けだったので、あまり後味は悪くなかったです。

OgieKakoさんはEclipseの件がかなり応えていましたが...


また、上記とは別に、各自個人練習もやってました。

自分はPKUを400問ぐらい?解きましたが、そこまで意味はなかった気がします。(次で述べる「努力の報われない練習」でした。)


(2)効率の良い練習/努力の報われない練習

1年やって痛感したのは、強くなるのに近道はない、ということでした。

地道な練習が実は一番効率がいい練習です。


例えば、わからない問題についてその1問を1日中考える、とかは、一見非効率に見えてとても良い練習でした。これは、結局解けないとしても、答えを見た時の感動or悔しさが半端なく、脳にしっかりと焼き付くからです。

すぐに答えを見てしまうと、「写しただけ」になってしまって記憶に残りません。


また、解けた問題でも、他の人の解答を読み、より良い解を目指して自分のコードを改良する、というのも効果的でした。

解法をチームメイトと議論するのも、解法の理解が深まって良かったです。


逆に努力の報われない練習の極端な例が、「早く、たくさん」問題を解くことです。

この方針は、(心が弱いと)簡単な問題を優先して解く方向に心理的圧力がかかり、難しい問題をあまり解かなくなってしまいます。

簡単な、解けるとわかっている問題を解いても、ただの「確認」にしかならないので、あまり意味がありません。

数学者に百ます計算をやらせるようなもので、たまにはいいかもしれませんが、百ます計算ばかりしていてもある日突然何かの定理が証明できるようになったりはしません

自分にはちょっと無理そうかな、ぐらいの難しめの問題を解いてこそ、実力がアップするみたいです。


最後に、PKUなんかで明らかにめんどくさそうな問題(誤差ゲーの幾何とか、実装問題とか、枝刈り探索とか)を開いた時、見なかったことにしてそっと閉じるのも良くないです。同種の問題が本番で出たときに死ぬほど後悔するハメになります。


(3)まとめのまとめ
  • 競技プログラミング未経験者の方: この記事見ても尻込みはしないでください! 問題解くの楽しいですよ?
  • ICPC世界大会に出場されるみなさん: 頑張ってください!
  • 来年のICPCに出場されるみなさん: また来年に向けて一緒に頑張りましょう!

team WAKABAで結構チーム練習の良さを感じたので、ICPCチーム内だけじゃなくて、他の人とも一緒に練習できたらいいなぁ、とか思ってます。

興味のある方は@kohyatohまでよろしく!

*1:その後落ちてんじゃん、とかのツッコミはなしで...