ACM/ICPC感想

コンテストの感想+反省.

今年は例年より1題多い6問の出題.多分全問正解が出るなんてのは想像していなくて,むしろ最後まで問題の選択肢を残すためだったんじゃないかと思います.
訂正(07/05): そんなことはないですね.実際全問正解チームが出たし.でもすごいなぁ.

本番では,うちのチームは順当にAから解いていきました.

A: Hanafuda Shuffle
配列の内容を入れ替えるだけの問題.単純なので,速く・確実に解くのが重要です.

B: Red and Black
閉領域の塗りつぶし問題みたいな感じ.私が担当しました.あまりフィールドが大きくなさそうだったので,何も考えずに再帰で解きました.

C: Unit Fraction Partition
再帰でどんどん数を引いていく方法で解く.とりあえずユークリッドの互助法のアルゴリズムを知っていれば,あとは再帰パラメータをしっかり考えれば解ける問題.

D: Circle and Points
半径1の円で覆える点の最大個数を求める問題.A,B,Cに比べると難問.
ところが,実はこの問題に似ている問題を計算機科学概論の授業でちらっと聞いていました.その問題は,与えられた全ての点を覆う最小の円の半径を求めるという問題だったのだけれど,そのイメージに助けられて解答の方針が割とすぐに立てられました.ラッキー.

E: Water Tank
作業的で特に難しいアルゴリズムはいらない問題なのですが,とにかく考えるのが面倒な問題です.ぼくはしばらくこちらの問題を考えていたけど,チームメンバーが2人ともFにとりかかっていたのでそちらに戦力を集中させることに.でも今考えると,最初からFに集中していればよかったかも...

F: Name the Crossing
E問題ががルールがある程度簡単に分かるのに対し,こちらはルールが分かりづらい問題.でも実はこっちのほうが,アルゴリズムを考えついてしまえばあとはコードにするのは楽な問題です.
時間が残り少なくなってから使うアルゴリズムを変更してしまったので,結局コーディングが間に合わずに解答できませんでした.

ペアプログラミングまでは行かなくとも,メンバー同士で互いにフォローが出来ていたので,前半戦をスムーズに進められました.危うくrejectを食らうところだったのを他のメンバーがミスを見つけて回避したり.やはりチームワークは大切だと思いました.