ICPCの解答提出方法について

投稿者 NOSS | 2019-07-12

ICPC国内予選の解答手順は特殊なのでよく理解しておく必要があります。
最悪の場合1問も解けない場合に陥ります。

概略

詳しくは公式サイトを参照してください。

大まかな流れは

  1. ソースコードを書く
  2. ソースコードをコンパイルする
  3. テストケースを競技ページからダウンロードする
  4. 手元のコンピュータでプログラムを実行する
  5. 出力結果とソースコードを競技サイトへ送信する
  6. 3-5の手順を2回繰り返し正しければ正解となる。

VS CodeとVSにてついて具体的な手順を解説します。

Visual Studio Codeの場合

すでにC++をコンパイルする環境が整っていることを前提としています。

ソースコードのコンパイル

これはコンピュータの環境によりますが、gccがインストールされているなら

g++ test.cpp -o test.out

をターミナルで実行するとtest.outという実行プログラムができます。

テストケースの実行

競技ページからテストケースを実行プログラムがあるフォルダにダウンロードします。このファイル名をAinとして

./test.out < Ain > Aout

とすると、test.outAinを入力したときの結果がAoutに出力されます。

結果の提出

公式ページでの解説:http://icpc.iisf.or.jp/past-icpc/domestic2015/user_man/

競技ページでtest.cppAoutをアップロードします。

正しければCorrect Answerと出て新たなテストケースを実行するよう言われるので以上を繰り返す。
このときソースコードは一切変更してはいけない。
なぜなら変更を行うと前回の提出が中断されたとみなされ、前回のテストケースは無効になる。
ちなみにテストケースは4つしかないためすべて使い切ると問題の正解が不可能になる。

Wrong Answerならデバックを頑張る。
このときテストケースは消費されないので、修正したらまたこのテストケースを実行すればよい。

Visual Studioの場合。

ソースコードのコンパイル

まず適当なC++のプロジェクトをつくり、ソースコードを書きます。
デバッグは上部の「ローカルWindowsデバッカー」を押すかあるいはF5キーを押すとコンパイルが行われ、プログラムが実行されます。
または、上部の「ビルド」->「ソリューションのビルド」でコンパイルが行える。

コンパイルが行われると例えばtest.exeという実行プログラムができます。

テストケースの実行

競技ページからテストケースをプロジェクトのtext.exeがあるフォルダにダウンロードします。このファイル名をAinとします。

次にタスクバーの検索欄に「cmd」と入力します。
候補にコマンドプロンプトがあるので実行します。

先ほどのtext.exeがあるフォルダをエクスプローラーで開き、そのパスを確認します。
例えばC:\Users\NOSS\source\repos\ProblemAのようなものです。これをコピーします。

続いてコマンドプロンプトで

cd C:\Users\NOSS\source\repos\ProblemA

と入力します。すると、そのフォルダに移動できます。この状態で

./test.exe < Ain > Aout

とすると、test.exeAinを入力したときの結果がAoutに出力されます。

結果の提出

公式ページでの解説:http://icpc.iisf.or.jp/past-icpc/domestic2015/user_man/

競技ページでtest.cppAoutをアップロードします。

正しければCorrect Answerと出て新たなテストケースを実行するよう言われるので以上を繰り返す。
このときソースコードは一切変更してはいけない。
なぜなら変更を行うと前回の提出が中断されたとみなされ、前回のテストケースは無効になる。
ちなみにテストケースは4つしかないためすべて使い切ると問題の正解が不可能になる。

Wrong Answerならデバックを頑張る。
このときテストケースは消費されないので、修正したらまたこのテストケースを実行すればよい。

提出ミスについて

解答を提出する前に正しい出力が行われているか必ず確認しましょう。
ICPCではWAの時間ペナルティが20分と重いので提出ミスはなるべく避けたいです。

  • 正しい答えか?
  • 提出問題先を正しく設定できているか?
  • 提出するデータが間違っていないか?

等を複数人で確認するのが望ましいです。