SRMに参加

SRMに参加

はじめに

誰か書いて下さる方を募集中です!

適当に書くので補足とか修正とか図を入れて(!)見栄え良くするとかして下さる方を募集中です!

アカウントを作る

まずはTopCoderにアカウントを作成する必要があります。ページの右上のRegister Nowというリンクをクリックしましょう。


最初に何がしたいのか聞かれるので、迷わずI Want to Competeからon TopCoderを選択しましょう。次のページでは個人情報をダラダラ入れます。(この後もまだあるかも。細かい設定は後でいくらでも変更がきくので、適当に入れておけばいいのかも。)全部の入力を終えると、近いうちに登録したメールアドレスにメールが届くので、そのメールに書かれたリンクからアカウントをアクティベイトします。(多分。昔のメールなので捨てちゃった...。)

日程を調べる

Event CalendarSRMなどの予定が書いてあるので、それを参照しましょう。サマータイムのときはEDT(UTC-4)でそうでないときはEST(UTC-5)です。それぞれ+13時間と+14時間に相当します。(なんかグーグルカレンダーにあるらしい。ここのコンテストカレンダーはどうやって管理されているんでしょう?>指揮者)


アカウントを作るときに、メールを送ってね、という感じのところにチェックを入れておくとリマインダーのメールが届きます。

Arenaを起動する

TopCoderの左側のメニューからAlgorithmを開いて、Launch Arenaを選択します。左上にあるO(n)という部分をクリックでもいいです。IRCチャンネルの#topcoder!tc arenaというと、こんなリンクをlogxhlさんが返してくれます。

Arenaの調整

やたらと大量にEnterやExitedなどのメッセージが流れてうっとおしいので、真ん中の方のメニューからOptionsを開いて色々と調整すると幸せになれるかも知れません。

SRMにレジスターする

開始時刻の3時間前から5分前までの間にRegistrationをする必要があります。上のメニューのActive Contestsから参加したいコンテストを選んでRegisterを選択します。ポップアップでルールとかが表示されるので、適当に読み飛ばして許諾すればRegistrationは完了です。(その旨メッセージが出ます。)※なお参加可能な人数には上限があります。コンテストごとに微妙に違いますが、SRMだと1750人です。(08/12/11現在)


参加するDivisionはその時のレーティングによって決まります。1200以上ならばDiv1になります。初参加者はDiv2になります。(レーティングは1200からのスタートという扱いになります。)

部屋に入る

SRMの開始数分前になると部屋の割り当てが完了したというメッセージが流れます。(@Chat Area)Active Contestsから該当するコンテストのEnterを選択すると自分の部屋に移動します。

問題を開く・解く

部屋に入ると問題を選択するプルダウンメニューがあるので、開きたい問題を選択します。選択した問題が開かれるので、どこかで実装しましょう。(プラグイン使っている人が説明してくれると思います。使ってないから分かんないや:P)


回答を送り付ける前にコンパイルする必要があります。右下の方のコンパイルというボタン(ショートカット:Alt+c)を押しましょう。必要に応じてサーバ側でテストを行い、満足したらサブミットします。(微妙にコンパイルオプションが違ったりするので、テストする方が安全だと思います。)


問題と時間と得点について

標準のSRMでは3問を75分で行います。ちなみにDiv1のEasyがDiv2のMediumに相当することが多いです。点数配分は基本的に250、500、1000ですが、その時々の難易度によって変動します。250が300だったり、500と1000の代わりに600と900だったりすることもあります。


回答を送っても点数配分そのままの点はもらえません。問題を開いてから、回答を送るまでにかかった時間に応じて減点されていきます。回答は複数回送ることができますが、実際に採点されるのは最後に送ったものになります。また、再送するたびに10%ずつ減点されていきますが、元の点数配分の30%は最低点として保障されています。


その他

自分のプログラムが2秒以内に回答しない場合、不正解とみなされます。これはサーバでの実行時間なので、自分の環境でしかテストしていない人は注意しましょう。(サーバはかなり速いので、大抵の場合は手持ち環境より良かったりしますが。)


使って良いメモリ量は64MBです。特に制限しないで手持ち環境でテストしていると痛い目を見るかも知れません。


C++の最適化オプションは-O2が付いているそうです。


チャレンジ

5分間のインターバルの後に、15分間のチャレンジフェーズがあります。同じRoom内の人の回答について、間違っていると思ったならば、間違った答えを返すであろう入力を与えます。実際に間違った答えを返す場合には+50点、正しい答えを返す場合には-25点となります。チャレンジは自分の現在の持ち点がマイナスになるとできなくなります。自分の回答がチャレンジを防いでも何もありません。


他の人のソースコードを読むには、問題選択プルダウンメニューの横の "Summary" というボタンをクリックし

20100712160657

出てきたRoom内スコアボード

20100712162120

の、問題別スコアの数字ををダブルクリックします(たとえば、ACRushさんの1000点問題を見るには、708.84をダブルクリック)。

チャレンジデータは、ソースコード表示ウインドウの左下の "Challenge" ボタンから入力します。


システムテスト

チャレンジフェーズが終わるとシステムテストが行われます。(実際には高速化のためにコンテスト中も裏でテストしていたりします。)システムテストを通過すると初めて、サブミットした時の点数が自分の点として確定します。