TopCoder SRM386に参加しました

250点問題は内容自体は非常に簡単だったので,いかに速く,ミス無くコーディング出来るかが鍵.でも結局時間がかかってしまって,250点問題を解いた時点で部屋内で16/20位ぐらいになってしまった.

500点問題はデータベースのテーブルに格納されたデータから超キーの組のうち最小のもの,最大のものをそれぞれ見つけるといった内容.仮にもデータベース系の研究室に所属している訳で,得意分野(のはず)だと思い,1000点問題には手をつけずにこれを解くことに専念することにする.

(部屋内では)誰も解けていなかったので,ラスト1分ぐらいで試しにsubmitしてみたら部屋内で暫定1位になって驚いた.ただ,特定の属性がsuperkeyであることを確かめるのは簡単だけど,複数の属性の組から成る超キーの存在を,すべての属性の組合せについて探すのが出来なかった.N個の属性の組合せ1 C N, 2 C N ... N C Nをvector >に格納して,それぞれについて超キーになってるかどうかチェックすれば完成だったんだけど,それをソースコードに落とし込むことが出来なかった.この辺は要練習だなぁ

TopCoderではコーディングの時間が終了すると,Challenge Phaseといって,同じ部屋の他の人が書いたソースコードを読むことが出来て,そのとき誤りを見つけた場合,その誤りを突くような入力を与えることによって相手の得点を無効化するための時間が15分あります.このときにChallengeはそれぞれ別の人に3回やって1回成功.逆に,自分がsubmitした500点問題はChallenge成功されてしまいました..この辺の駆け引きが非常に面白いだけでなく,一つの問題に対して本当にいろんな書き方(スタイル)があることが分かって勉強になりました.今回の成績はこんな感じ

あと,submitされたソースコードの一部に"// Powered by XXX"という謎のコメントがあったのが気になりました.コーディングやsubmit作業を円滑にするような,それ用のツールがあるんですかね.

Coding Phaseが終了した後,日本からの参加者は居ないかとチャットルームに居る人を眺めていると,id:ranha氏と偶然同じ部屋に割り当てられていることを発見しました.彼と,とあるソースコードに明らかなバグが2つあるのに,それを突いたはずのChallengeが成功せず,おかしいよねーという話をチャットルームでしていたら,その後のSystem Testで落とされていました.謎.

ちなみに,Challengeに成功した場合,Ratingに影響するっぽいです.というのも,私はid:ranha氏よりも250点問題を解くのが遅かったのに,今回のRatingでは自分の方が上になっているからです.この辺の採点方法も謎.

ただ,この間UVa Online Judgeのコンテスト(4時間)の方にも参加したのですが,TopCoderSRMの方が比較的短時間(1時間半)で終わるし,参加者間のインタラクションがあるのでやってて面白いしためになると思いました.その辺もあってかGoogleTopCoderを面接対策として推奨しているようですね.

今回非常に楽しめたので,TopCoderSRMは今後も定期的に参加しようと思います.TopCoderのスケジュールによると,SRMは大体週1回のペースで開かれているようです.