チュートリアル

ユーザ登録編

それでは、情画プロコン #3の参加の仕方をチュートリアル形式で学んでみましょう。

まずは、このページから、情画プロコンシステム(以下システム)に移動します。

そして、ユーザ登録をしましょう。

※前回の「情画プロコン」に参加した人も、もう一度登録しなおしてください。

システムログインページの「ユーザ登録」をクリックして、登録画面に移動します。

最初に情画プロコン #3のポスター(チラシ, メール)にある登録キーを入力します。ユーザ名はもちろんニックネームで結構です。メールアドレスは、chiba-u.jpで終わるものを入力してください。そうでないとシステムに弾かれます。最後に、パスワードを2回入力して、学年を選び、右下の「Register」ボタンを押すとユーザ登録は完了です。

なお、登録完了等のメールは送信しませんので、登録前にパスワード等を控えておいてください。

初めてのコード提出編

登録が終わったら、登録したユーザ名とパスワードでログインします。

ログインしたら、すかさず左側のサイドバーから「コンテスト」をクリックし、「Test Contest」を選びます。

(※もちろん、本番は「情画プロコン #2」を選びます。)

コンテストが選べたら、今度は問題を見てみましょう。問題はサイドバーの「問題」をクリックすると見ることが出来ます。

コンテストには問題が複数ありますが、それは画面右側の問題名のリンクをクリックすることで切り替えることが出来ます。

一番上に書いてある「リソース制限」は、プログラムをサーバで実行したとき、実行時間は何秒まで許されるか、メモリはどの程度使えるか、を表したものです

これに違反しないようなプログラムを書かないと、減点をくらってしまいます。

それでは、この問題を解いてみましょう。といっても簡単ですね。例えば、このようなソースコードでどうでしょうか(C言語)

#include <stdio.h>

int main() {
	int numA, numB;
	scanf("%d %d", &numA, &numB);
	printf("%d\n", numA + numB);
	return 0;
}
			

このように、標準入力と標準出力を使ったプログラムを書いてください。

プログラムを書いたら、これで大丈夫なのかサンプル入出力を使って確認します。確認は、ideoneを使うのが簡単でしょう。

もちろん、自分で環境を用意している場合は、そちらを使ってもらってかまいません。

ideoneの場合は、左下の言語の欄から言語名を設定し、書いたソースコードを張り付け、サンプルインプットを「Enter Input(stdin)」に貼付けて、右下のRunボタンを押します。

「Success」と表示され、stdoutがサンプル出力と合っていることを確認します。そうでない場合はプログラムを直しましょう。(左上の「Edit」から修正可能;ソースコードの自分のPCへの保存を忘れないこと)

確認が終わったらいよいよ提出です。システムのサイドバーの「提出」を選び、問題、言語、ソースファイルを指定してSubmitを押します

すると画面が切り替わり、先ほどのソースコードが「Pending」(待ち状態)になっていることが分かると思います。

3秒ほど待ち、ブラウザの更新ボタンを押します。すると結果が出ていると思います。緑で100になっていたら成功です。この100があなたの得点です。

この得点の部分をクリックするとどのテストケース(採点用入出力ファイルのセット)を通過したのかの詳細が出ます。緑なら全てACCEPTになっていると思います。

WRONGの場合は、答えが違う、Time Limit Exceeded、Memory Limit Exceeded はリソース制限を超過してしまったことを表します。

得られる得点は問題の配点×ACCEPTとなったテストケース数÷全テストケース数で決まります。今回は問題の配点が100で10個のテストケース全てを通過しているので、100点がもらえました

さて、本当に得点が得られたのか確認してみましょう。システムの左サイドバーの「順位表」をクリックすると、自分が今何点取れているのか、何位なのか、他の人は何点取れているのかなどの情報が分かります。

初めてのWRONG編

それでは、次の問題も解いてみましょう。配列の要素の合計を算出する問題です。次のようなプログラムを書いてみました。

#include <stdio.h>

int main() {
	int i, N;
	scanf("%d", &N);

	int sum = 0;
	for (i = 0; i < N; i++) {
		int temp;
		scanf("%d", &temp);
		sum += temp;
	}

	printf("%d\n", sum);
	return 0;
}
			

できたら、サンプル入出力をideoneなどで確認してみます。 ……はい、大丈夫そうですね。それでは提出してみます。

あれ?赤の得点表示になってしまいました。これは、いくつかのテストケースがうまく行かなかったことを表しています。

具体的にどういう判定になっているのか確認するため、赤ボタンをクリックしてみます。

どうやら、Time Limit Exceeded や Memory Limit Exceededではないので、プログラムが間違っているようです

しかし、全てがWRONGというわけではないので、プログラムが根本的に間違っているということでもなさそうです。

こんなときは、問題に戻って、制約条件や問題をよ〜く読みます。すると、こんな記述が見つかります。

これで原因が分かりました。配列の要素を合計すると、その値はint型に収まらないのです。

これを意識したプログラムを書くと以下のようになります。

#include <stdio.h>

int main() {
	int i, N;
	scanf("%d", &N);

	long long int sum = 0;
	for (i = 0; i < N; i++) {
		int temp;
		scanf("%d", &temp);
		sum += temp;
	}

	printf("%lld\n", sum);
	return 0;
}
			

これで提出してみると…

ということで、うまく行きます。このように問題によっては、サンプル入出力を通ったとしても、テストケースによってはうまく動かない場合があります。

なので、入力の制約には十分に気をつけましょう。

以上でチュートリアルは終了です。皆さんがよい結果を残せることを祈ります。