JOI logo

第16回日本情報オリンピック (JOI 2016/2017) 
予選競技規則

2016年10月30日
情報オリンピック日本委員会

・JOI 2016/2017 予選競技規則を公表しました. (2016.10.30)

予選競技注意事項 予選競技規則 質問とその回答

よくある質問とその回答です. 実際にあった質問については, 公開に適するよう表現を修正しています.
質問とその回答へ

予選競技注意事項
概要  日本情報オリンピックは個人戦である. 予選競技では 6 問の問題が出題され, それぞれの問題に対するプログラムを作成する. ウェブブラウザで My Page にログインし, 「予選競技」ページへ進む. ウェブブラウザで問題を閲覧し, 解答を提出する.
質問・問い合わせ  質問や問い合わせは info@ioi-jp.org 宛の電子メールで行うこと. ただし, 予選競技時間中に質問に回答することはない. また, 電話などその他の方法での質問は受け付けない.
会場  予選では特定の会場は設けない. 自宅や学校などで, 自分の PC あるいは学校の PC などを使って競技に参加すること.
ウェブブラウザ  予選で使用予定の PC とブラウザの表示と動作を, 予選練習時 (次項「予選練習」を参照) に確認すること. 必要に応じて, 支障なく競技に参加できるブラウザを予選競技開始までにインストールしておくこと.
 Windows 7 上の Internet Explorer 11 (11.0.9600.18449), Windows 10 上の Edge 25, および, Windows 10 上の Google Chrome 53 で動作を確認しています.
予選練習  11月29日(火)12:00 から12月11日(日)11:00 (競技開始 2 時間前) まで, My Page にログインすることで予選練習に参加できる. 予選練習では, 問題の表示や解答の提出が正常に行えるか確認できる. また, 解答の形式が適切か確認できる.
第16回日本情報オリンピック (JOI 2016/2017) 予選競技規則
不正禁止  本規則を遵守すること. 規則を破った場合は失格となる. 特に, 競技中に第三者の助けを借りたり, 他の参加者の助けとなる行為は禁止されていることに注意すること.
競技時間  3時間 (2016年12月11日(日) 13:00〜16:00)
問題数  6 問
配 点  配点は全問一律で各問 100 点であり, 満点は 600 点となる. また, 問題ごとに採点用入力データが 5 個あり, 配点は入力データ 1 個につき 20 点である. 採点用入力データについては「解答方法」を参照のこと.
解答方法
  • 各問題には 5 個の採点用入力データが与えられる. 各問題について, 問題文の趣旨に合致するプログラムを作成し, 5 個の採点用入力データに対して実行し, プログラムのソースコードと採点用入力データに対する実行結果を提出すること.
  • プログラムのソースコードとして問題ごとに 1 つのファイルを提出すること. もし, 1 つの問題に複数のソースコードがある場合は, 1 つの書庫ファイルにまとめて提出すること. この場合, 書庫ファイルの形式は, zip 形式や lzh 形式など, 任意の形式を用いて構わない.
  • 1 つの問題の各採点用入力データに対して, 別々のプログラムを書いてはいけない.
  • 採点は 5 個の採点用入力データに対する出力だけを対象に行うが, 採点用入力データだけに対して動作するのではなく, 問題文の趣旨に合致する動作を行うプログラムの作成を目指すこと. 例えば, 他のプログラムで採点用入力データに対する出力を計算しておき, その出力を表示するだけのプログラムを提出することは, 問題文の趣旨に合致しない.
  • 一方, 採点用入力データの中には, プログラムを工夫しないと短時間で実行が終わらないようなデータが含まれていることがある. そのため, 一部の採点用入力データについてのみ出力を得ることができた場合は, 出力が得られた分だけを提出すればよい. その出力が正しければ, その分は得点となる.
  • 問題ごとに異なるプログラミング言語を使用して解答することも可能である. 例えば, 問題 1 のプログラムを C++ で書き問題 2 のプログラムを Java で書くなど, 問題ごとに異なるプログラミング言語を使うこともできる.
プログラムの
入出力方法
 プログラムが採点用入力データを読み込んだりそれに対する出力データを書き出したりする方法は問わない. 例えば, ファイル名を実行時に別途指定できるようにプログラムを書いても良いし, ファイル名を固定してプログラムを書いておいて実行時にデータのファイル名を変えることで対応しても良い. また, 標準入出力を使うプログラムを書いておいて, 入出力をリダイレクトしたりコピーアンドペーストしたりしても良い (その場合, 余計な文字や行が含まれないよう注意すること.「出力ファイルの形式」を参照のこと.).
入力データの形式  与えられる採点用入力データの形式は以下の通りである.
  • 入力データの改行コードは, CR+LF である.
  • 複数の項目を含む行では, 項目は 1 つの「空白」で区切られている. ここで, 「空白」とは半角空白のことであり, 全角空白やタブは「空白」ではない. 1 つ目の項目の前や最後の項目の後に「空白」はない.
  • 項目は整数または文字列である.
解答の提出  各問題の解答アップロード機能付きページには,
  • 問題文
  • 5 個の採点用入力データ
  • 解答アップロード欄
が含まれている. 1 つのソースファイル, および, 5 つの入力データに対する出力をそれぞれ 1 つのファイルにし, 解答アップロード欄から提出せよ. 解答は競技時間中, 何度でも提出し直すことが可能である. ただし, 予選競技終了時間直前は, アップロードが集中して時間がかかる可能性がある. 早めにアップロードするとともに, 無用なアップロードを避けること.
提出するファイル
ファイル名について
 提出するプログラムのソースファイルおよび出力データファイルの名前に使える文字は, ASCII コードに含まれる文字のうち次に掲げる文字のみである.
   0 1 2 3 4 5 6 7 8 9
		  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
		  a b c d e f g h i j k l m n o p q r s t u v w x y z
		  . - _
最後の 3 文字は, ピリオドとハイフンとアンダースコアである. ここにない文字は空白も含めて使用できない. (これはファイル名に対する制約であることに注意.)
出力データファイルの内容について
出力データファイルの内容には, ASCII コードに含まれる文字だけが使用できる.
ソースファイルのサイズについて
提出するプログラムのソースファイルのサイズは 100KB 未満でなければならない.
出力ファイルの形式
  • 提出された出力ファイルに, 問題文の指示にない文字・記号・制御コード (Unicode のバイトオーダーマーク (BOM) など) が含まれている場合は不正解とする.
  • 出力ファイルの改行コードは, CR+LF, LF, CR のいずれでもよい.
  • 提出された出力ファイルに含まれる改行コードの個数が, 問題中の「出力」の項に指定された行数よりも多い場合は不正解とする.
  • 提出された出力ファイルの各行に含まれる項目数が, 問題中の「出力」の項に指定されたその行の項目数と異なる場合は不正解とする.
  • 複数の項目を含む行では, 項目を 1 つの「空白」で区切ること. また, 1 つ目の項目の前や最後の項目の後に「空白」を挿入してはならない. これらに反する出力ファイルは不正解とする. ここで, 「空白」とは半角空白のことであり, 全角空白やタブは「空白」ではない.
  • 項目は整数または文字列である.
  • 項目が整数の場合, 次のように出力(表記)すること.
    正整数
    正整数は, 数字(0 から 9 まで)を用い十進法で表すこと. 先頭が 0 であってはならないし, 符号や小数点をつけてはならない.
        良い例: 123
        悪い例: +123    123.0    0123
    零は 0 で表すこと.
        悪い例: +0    -0    0.0    00
    負整数
    負整数は, 負号(-)の後に 1 個以上の数字を並べ十進法で表すこと. 符号の直後の数字は 0 であってはならない.
        良い例: -123
        悪い例: -123.0    -0123
  • 項目が文字列の場合, 1 個以上の文字の並びとして出力すること.
  • 提出する出力ファイルの最後の改行の有無は正誤に影響しない. 改行コードの個数が問題中の「出力」の項に指定された行数よりも多い場合は内容にかかわらず不正解となるが, 改行コードの個数が問題中の「出力」の項に指定された行数と同じか 1 つ少ない場合は, 正否内容によって決まる.
採点方法
  • ソースファイルが提出されていない問題は, 提出された出力ファイルの内容に関わらず 0 点となる.
  • 各採点用入力データに対して, 提出された出力ファイルが, その問題の「出力」の項の指示および「出力ファイルの形式」の指示に合致している場合に正解となる.
  • 競技時間中に同じ解答アップロード欄に複数回提出した場合, 採点は最後に提出したファイルにのみ基づき行われる.
  • ある採点用入力データに対して, 提出された出力ファイルの内容が提出された(ソースコードに対応する)プログラムの出力でないことが判明した場合は, その採点用入力データに対する得点は 0 点となる.
  • 提出された(ソースコードに対応する)プログラムが「解答方法」に反すると情報オリンピック日本委員会が判定した場合は, その問題に対する得点が 0 点となることがある.
第三者との
やり取りの禁止
 予選競技中, 競技参加者はいかなる第三者とも, いかなる方法でも相談や情報のやり取りをしてはならない. そのため, 競技中は, 例えば, Twitter, Facebook, ブログなどへの書き込み, SNS の利用, Skype, LINE, チャットの利用, 電子メールの送受信 (情報オリンピック日本委員会とのやりとりを除く) は許されない.
使用できる
プログラミング言語
 使用できるプログラミング言語に制限はない. ただし, 「使用禁止のアプリケーション」の項を参照のこと.
使用できる
機種・OS
 インターネットに接続でき予選競技実施システムを利用できるウェブブラウザが競技開始前にインストールされている PC (personal use computer) であれば機種や OS に制限はない.
使用できるPC
の台数
 予選競技中に, 開発や計算に使用できる PC は 1 台だけである.
 ただし, 開発や計算以外の目的で複数の PC を使用することは許される. 例えば, 開発用 PC とは別の PC (タブレットやスマ―トフォンなど) で問題文を閲覧しながら, 開発用 PC の上でプログラムを作成・実行して予選競技に参加することは許される.
PC 共用の禁止  予選競技中, 複数の競技参加者が 1 台の PC を共用することを禁止する. また, 競技に使用する PC を競技参加者以外の第三者が操作することも禁止する.
ネットワークへの
アクセスについて
 予選競技中, 競技参加者は本競技規則の他の項目に抵触しない範囲でネットワークにアクセスすることができる.
 例えば, 問題の閲覧, 結果の提出, このページ (注意事項と競技規則) の閲覧, 情報オリンピック日本委員会との通信, 開発環境に付属するオンラインマニュアルの利用, インターネット上で公開されている情報を検索して競技に利用することは, 許される.
 ただし, 予選競技中に Twitter, Facebook, ブログ, SNS などを用いて情報発信したり, チャット, Skype, LINE, メールやインターネットの質問サイトなどを用いて第三者の助けを借りることは, 「第三者とのやり取りの禁止」に抵触するので, 許されない.
使用禁止の
アプリケーション
 開発環境, ウェブブラウザ, 参考資料を閲覧するために必要なアプリケーション, 情報オリンピック日本委員会との通信のために使用するメーラ以外のアプリケーションの使用を禁止する. ただし, Mathematica, Maple, MuPad, Maxima などの数式処理ソフト, および, Excel などの表計算ソフトは開発環境であると解釈し, これらを使用して解答を作成することを認める.
ライブラリの利用  予選競技では, プログラム開発環境に付随しているライブラリや, インターネット上で公開されている外部ライブラリを使用することができる.
参考資料の閲覧  予選競技中に参考資料を閲覧することは許される. 具体的には,
  • 競技中に占用できる参考書などの書籍
  • 予選競技に使用するプログラム開発環境に付随しているマニュアルやヘルプ(オンラインマニュアルやオンラインヘルプを含む)
  • 予選競技前や予選競技中に検索して入手した資料やサンプルプログラム
を使用して競技に参加することは許される. また,
  • 入手したサンプルプログラムなどをコピーアンドペーストなどで解答プログラムに活用すること
  • ブログやインターネットの質問サイトに書かれた内容を, 検索して利用すること
も許される.
 ただし, 予選競技開始後でかつ予選競技終了前にブログやインターネットの質問サイトに書き込みを行うことは, 「第三者とのやり取りの禁止」に抵触するので, 許されない.
質問とその回答
Q: 提出する出力ファイルの最後の改行の有無は正誤に影響しますか?
A: 影響しません. 「出力ファイルの形式」において「提出された出力ファイルに含まれる改行コードの個数が, 問題中の「出力」の項に指定された行数よりも多い場合は不正解とする.」と規定されています. 改行コードの個数が問題中の「出力」の項に指定された行数よりも多い場合は内容にかかわらず不正解となりますが, 改行コードの個数が問題中の「出力」の項に指定された行数と同じか 1 つ少ない場合は, 正否内容によって決まります.
Q: プログラムの実行結果をテキストエディタにコピーアンドペーストして出力ファイルに保存して, 提出するつもりです. 注意すべきことはありますか?
A: 提出する出力ファイルは「出力ファイルの形式」の制約を満たすように注意してください. 行の最後や出力ファイルの最後に問題文の指示にない空白や改行が入らないように注意してください. Unicode 形式で編集するテキストエディタを使う場合は, バイトオーダーマーク (BOM) を含まない形式で保存するように注意してください. あらかじめ, 使用するテキストエディタの動作・設定を確認されることをお勧めします. また, 予選練習を利用して, 出力ファイルの保存方法を確認されることをお勧めします.
Q: ソースコードを提出する際, 統合開発環境のプロジェクトファイルを圧縮するのには, どのような圧縮形式を用いれば良いのでしょうか?
A: 特に, 書庫ファイルの形式に制約はありません. ただし, 「提出するファイル」に「提出できるファイルのサイズは100KB未満」という制約があることにご注意ください. また, お使いの統合開発環境にソースコードを 1 つのテキストファイルにまとめて保存する機能がある場合は, そのような機能を使うことをお勧めします.
Q: 統合開発環境を使用して問題を解こうと思っています. プロジェクトディレクトリのどのファイルを提出すれば良いのでしょうか?
A: 「解答方法」には, 「プログラムのソースコードとして問題ごとに 1 つのファイルを提出すること. もし, 1 つの問題に複数のソースコードがある場合は, 1 つの書庫ファイルにまとめて提出すること. この場合, 書庫ファイルの形式は, zip 形式や lzh 形式など, 任意の形式を用いて構わない.」と定められています.
競技中に作成したプログラムのソースコードを提出してください. 開発環境によっては, 複数のファイルをソースコードとして作成することもあるかもしれません. その場合は, ソースコードとして作成した全てのファイルを 1 つの書庫ファイルにまとめて提出してください.
もし, お使いの開発環境にソースコードを1つのファイルにまとめる機能がある場合は, それを使っていただいても構いません.
プロジェクトごと圧縮してアップロードすることも可能ですが, 提出できるファイルのサイズは 100 KB未満となっていますのでご注意ください.
あらかじめ, ソースコードの提出方法を予選練習で確認されることをお勧めします.
Q: インライン関数は使用可能でしょうか?
A: はい. 使用可能です.
Q: 問題 1 のプログラムを C++ で書き問題 2 のプログラムを Java で書くなど, 問題ごとに異なるプログラミング言語を使ってもいいですか?
A: はい. 問題ごとに異なるプログラミング言語を使用して解答することは可能です.
Q: C/C++ で 64 bit 型の整数を扱う場合, long long int の代わりに __int64 を使ってコードを書いてもよいのでしょうか.
A: はい. 予選競技では, 使用できるプログラミング言語に制限はありません. また, プログラムを書く際に使用する処理系・開発環境の機能についても制限はありません. したがって, __int64 が使用可能な開発環境を使う場合は, __int64 を使って予選競技に参加することも可能です. 予選練習を活用して, あらかじめ開発環境の動作を確認することをお勧めします.
Q: 予選練習問題で, プログラムの出力は正しいはずなのに, 出力ファイルを提出すると不正解と表示されます.
A: 予選練習および予選競技では, 出力ファイルの中に出力ファイルの形式の制約をみたしていない箇所が 1 箇所でもあると不正解となります. 空白の位置・個数, 改行の位置・個数, 改行コードの種類を確認してください. また, バイナリエディタや 16 進ダンプコマンドを用いて, ファイルの先頭や末尾に不要な制御コード等が追加されていないことを確認してください. C/C++ の開発環境によっては, 改行の出力に printf("\r\n") を使うと CR+CR+LF が出力され不正解となることがあります. この場合, printf("\n") を使うことで, 改行コードとして CR+LF を出力することができます.
Q: 提出する出力ファイルの拡張子はどうすればよいのでしょうか. 出力ファイルの拡張子は txt とすべきでしょうか.
A: 提出する出力ファイルについては, 提出するファイル出力ファイルの形式の制約をみたしていれば, それ以上の制約はありません. したがって, 提出する出力ファイルの拡張子としては, txt を使うこともできますし, それ以外の拡張子を使うこともできます. 予選練習を活用して, あらかじめ提出ファイルの作成方法と提出方法を確認することをお勧めします.
Q: 開発環境がインストールされた PC がインターネットに接続されていません. 開発用 PC とは別の PC から問題文をダウンロードしたり, 解答ファイルをアップロードすることは許されますか?
A: 許されます.「使用できる PC の台数」の項において, 「予選競技中に, 開発や計算に使用できる PC は 1 台だけである.」と定められています. 開発や計算以外の目的で複数の PC を使用することは許されます. ただし, 複数の競技参加者が共用することは許されません (「PC 共用の禁止」の項を参照してください).
Q: ネット上のコンパイラ (ソースをアップロードすると実行結果を返してくれるウェブサービス) を利用して予選競技に参加することはできますか.
A: できません. 第三者とのやり取りの禁止には, 「予選競技中, 競技参加者はいかなる第三者とも, いかなる方法でも相談や情報のやり取りをしてはならない」と定められています. したがって, 予選競技時間中に, 予選競技システム以外の場所に自分自身のソースをアップロードすることはできません. そのような行為を行った場合, ソースが第三者の目に触れる可能性があり, 予選競技規則に違反する可能性があります. 予選競技には, 自分自身の PC にインストールされた開発環境を用いて参加してください.