初めてtopcoder SRMに参加した話
競技プログラミングを始めてから結構経っていましたが初めてtopcoderのSRM(Single Round Match)に参加してきました。
今回私が参加したのはSRM 788でした。
topcoderとは
競技プログラミングコンテストサイトの1つで、他にも日本のAtCoder、ロシアのCodeforces等があります。
SRMとは
定期的にtopcoderが開催している競技プログラミングコンテストで、比較的短時間のコンテストなので気楽に参加することが出来ます。
つまずいたこと
普段は主にAtCoderのコンテストばかり出ていたので、仕様の違いでつまずいたことを少し書いていければなと思っています。
コンテストへの参加方法が分からない
自分がなかなかSRMに参加できなかった大きな理由がこれです。
AtCoderやCodeforcesはブラウザ上でコンテストが開催されるためユーザー登録さえしていれば簡単にコンテストに参加できるのですが、topcoderでは以下のようになります。
アカウント作成
まずtopcoderにアクセスしてアカウント作成します。
アプレットの準備
Javaをインストールしておきます。
次にtopcoderのサイトのヘッダー部分から「COMMUNITY」→「Compete」→「Competitive Programming」の順にクリックした先のページからJAVA APPLET ARENAをダウンロードします。
ダウンロードしたContestAppletProd.jnlp
というファイルを実行してアプレットを起動します。
参加登録
起動したアプレットにtopcoderのアカウントでログインします。
ヘッダー部分の「Active Contests」をクリックして参加したいコンテストをクリックし、「Register」で参加登録を行います(コンテスト開始5分前まで参加登録可能です)。
コンテスト開始5分前になると先程の「Register」の下にある「Enter」からコンテストに参加することが出来ます。
ひとまずここまでが初めてコンテストに参加するまでの流れになります。
次からはコンテストの流れについて見ていきます。
コンテストの流れ
コンテストでは主に4つのフェーズに分かれています。
- コーディングフェーズ
- INTERMISSION
- チャレンジフェーズ
- システムテスト
コーディングフェーズ
時間になったら「Select one」から問題を開いてコーディングを始めてくのですが、AtCoderやCodeforcesと違い、コード全部を実装するのではなく、(C++の場合)指定されたクラスを実装します。
問題文は基本全部英語です。
注意点としては、問題を開いてから提出するまでの時間が短いほど高得点なのでまだ解かない問題は開かないことをおすすめします。
また、提出をしなくても1問でも問題を開くとレートが変動します。
コードが書けたら「Compire」を押して、コンパイルが通ったら「Batch Test」でサンプルケースを試すことが出来ます。
そして「Submit」ボタンでコードを提出することが出来ます。
ここではまだ正解、不正解については分からず、この時間で提出した場合の点数のみが教えられます。
正解、不正解については後述のシステムテストで判明します。
また、再提出も原点対象なので注意。INTERMISSION
5分間の休憩時間チャレンジフェーズ
同じroom内の他の人のコードが見られるようになるので、不正確なコードにサンプルケースを与えて撃墜して不正解にすることが出来ます。(嘘解法やコーナーケースへの対処の不備を見つけて指摘する感じ)システムテスト
問題中のサンプルはとても弱いテストケースになっているので、本当に提出したコードが制約を満たす様々な値で正しい動きをするのかのテストが入ります。
ここでシステムテストに落ちた提出は0点になります。結果と感想
自分はDiv.2に参加して3問中2完で436.6点でした。
仕様に慣れるのに時間がかかってしまい、解けたけど思ったより低い点数となってしまいました。
レートは1191でGreenとなりましたがtopcoderの初期レートが1200らしいので-9で普通に冷えました。
でもまあ初めてにしてはまずまずの結果なのかなと思いました。
普段AtCoderに慣れすぎていたせいか少し手間取ってしまったけどなんとか2問解けて安心しました。