第21回日本情報オリンピック (JOI 2021/2022) 本選概要

2021年12月15日
情報オリンピック日本委員会

更新履歴

目次

日時

2022年2月12日(土) 15:00 ~ 2月13日(日) 15:30

JOI 2021/2022 本選はオンラインで開催します. 自宅または学校の部室などから参加してください. 開発環境は各自で用意してください.

本選実施スケジュール

2月6日(日)21:00 ~ 12日(土)8:00
事前練習ラウンド
2月12日(土)
ガイダンス・開会式   15:00~16:00
プラクティス(実機練習) 16:00~18:00
2月13日(日)
本選競技 9:00~13:00
休憩 13:00~14:30
問題解説 14:30~15:30

参加申込書・保護者承諾書

参加申込書・保護者承諾書をhttps://www.ioi-jp.org/joi/2021/2022-ho-form.pdfよりダウンロード&印刷し, 保護者の方と一緒に内容を確認した上で必要事項を記入し, 保護者の方に参加承諾の署名・捺印をしていただき, 以下の 1, 2 いずれかの方法で提出してください (2022年1月10日(月)必着).

  1. (郵送による提出) 下記の住所まで送付してください.

      〒150-0002
      東京都渋谷区渋谷1-10-7 グローリア宮益坂Ⅲ 301
      特定非営利活動法人 情報オリンピック日本委員会

  2. (メールによる提出) 「参加申込書・保護者承諾書」をスマートフォンやデジタルカメラ等で撮影して、画像ファイルを添付したメールを
    joi@ioi-jp.org
    まで送信してください.

情報オリンピック日本委員会への連絡

本選参加者との連絡は, 基本的に, 本選参加者を対象とした Discord サーバを通じて行います (競技実施中を除く).

Discord サーバへの接続方法は2022年1月中旬頃までに本選参加者に連絡します.

競技実施中の連絡は, コンテストシステムの「質問 (Questions) 」欄から送ってください.

本選競技内容

本選競技では, アルゴリズムを設計し, そのアルゴリズムを C++ で実装する課題が出題されます.

どの課題にも実行時の実行時間と使用メモリに制限があります. 課題によってはアルゴリズムの効率が重要となります. 採点用入力データは, 効率が異なる解法を識別できるよう調整されています. どの課題にも, ある程度の効率であって, 正当な解を出力する解法であれば, その課題の制限の中で正解を出力できるような採点用入力データがいくつか用意されています. ですから, 競技参加者が全ての採点用入力データに対して制限内で正解を出力する解法を得られなかった場合でも, 課題に取り組む意味はあります.

第5回~第20回の日本情報オリンピック本選の問題・解説を参照されることをお勧めします.
 https://www.ioi-jp.org/problem_archive.php

第20回日本情報オリンピック 本選競技実施方法概要

競技時間 4 時間
課題数 5 題
配 点 配点は各課題 100 点で, 満点は 500 点となる.
各課題は 1 つまたは複数の小課題からなる. 小課題の配点は問題文中に記載する.
使用できるプログラミング言語 C++ (C++ のバージョンは C++17)

本選競技システムで使われるコンパイルオプション
【g++ (C++)】 -DEVAL -std=gnu++17 -march=native -O2 -pipe -static -s-o 2022-ho-t? 2022-ho-t?.cpp
コンパイルオプションは競技システムからも確認できる.
使用できる用品 筆記用具および計算用紙を使用できる. 筆記用具と計算用紙は各自で用意すること.
競技参加者は, 競技中に小さなマスコットを机の上に置くことができる. 小さなマスコットを身につけて競技に参加することもできる.
使用できる機器・ソフトウェア 本選競技に使用可能な機器・ソフトウェアに制限は無い. 競技参加に必要な機器・ソフトウェアは各自で用意すること.
競技規則の他の禁止事項に抵触しないのであれば,オンライン・オフラインを問わず,あらゆるソフトウェアやウェブサービスを利用することができる. もしウェブサービスを利用してソースコードの作成や検証をする場合は, 作成したソースコードが競技時間中に第三者の目に触れることのないように十分注意すること.

各自の用意した機器・ソフトウェアで本選競技に問題無く参加できることをプラクティスの時間に確認すること.
解答方法および解答提出方法 本選競技は CMS (Contest Management System) を用いて実施する.
課題の趣旨に合致するプログラムを作成し, 解答提出用 Web インタフェースからソースを提出すること. 解答プログラムは, 入力を標準入力から読み込み, 出力を標準出力に出力し, 正常終了すること(0 を返すこと).
提出した解答にはフィードバックが与えられる.
各課題ごとに, 最後の提出から 1 分間は解答を提出することができない.
各課題ごとに, ソースを提出することができる回数は 50 回までである.

【ジャッジシステムの仕様について】
CMS でテスト機能が使用できる. ソースコードと入力ファイルをアップロードすることで,ジャッジサーバー上での実行結果を得られる.
フィードバック 競技中に提出されたソースは「使用できるプログラミング言語」に記載のコンパイルオプションを用いてコンパイルされ, 問題文中の例と, 全ての採点用入力データに対して実行される. その結果がフィードバックとして競技参加者に通知される. 競技参加者は, フィードバックを利用することで, 自分の提出したソースが問題文の仕様をみたしているかどうかを確認することができる. また, その課題に関する自分の得点を競技中に知ることができる.
フィードバックの詳細については, プラクティスの時間に確認することを勧める.
フィードバックが与えられるまでに時間がかかることがある. 競技終了 15 分前までに提出されたソースには競技時間内にフィードバックが与えられる. それ以降に提出されたソースには競技時間内にフィードバックが与えられるとは限らない.
採点方法 予選同様, 採点用入力データに対する出力の正誤で得点を定める.
ただし, 実行時の実行時間と使用メモリに制限がある. 制限の詳細は競技システムの問題ごとのページから確認できる.
採点プログラムは解答プログラムをコンパイルし, 採点用入力データに対して実行する. 時間・メモリの制限を満たして正常終了し, かつ, 出力が正しい場合に, その採点用入力データへの出力は正解となる.
各課題は 1 つまたは複数の小課題からなる. 小課題に関する詳細は問題文中に記載する.
各小課題に対し, いくつかの採点用入力データをセットにして採点を行う. セット内の全ての採点用入力データに正解した場合に限り, その小課題分の得点が与えられる.
ソースを複数回提出した場合は, 提出された全てのソースが採点される. 各小課題に対し, 提出された全てのソースにおけるその小課題の得点の最大値が, その小課題の最終的な得点となる.
各課題の得点は, その課題に含まれる小課題の最終的な得点の合計である.
質問 競技参加者は, 質問がある場合はコンテストシステムの「質問 (Questions) 」欄から質問を提出することができる.
競技開始から 2 時間経過するまでに提出された質問には競技中に回答する. 競技開始から 2 時間経過後も質問を提出することはできるが, 競技時間内に回答するとは限らない.
競技中の質問方法および質問への回答の確認方法は, プラクティスの時間に確認することを勧める.
質問は日本語で行うこと.
競技中の資料の参照について
競技中のインターネットの利用について
本年度の本選はオンライン開催である. 競技中の資料の参照およびインターネットの利用に関する規則は, 会場で開催されていたときのものとは大きく異なるので注意すること.
  • 競技参加者は, 競技中に参考書・ノート・辞書などの資料を参照することができる.
  • 競技参加者は, あらかじめ自分の PC 上に作成しておいたプログラムや文書を利用して競技に参加することができる.
  • 競技参加者は, 競技中にインターネット上で公開されている情報を検索して競技に利用することができる.
  • ただし,SNS や質問サイトなどを用いて第三者の助けを借りることは, 以下の禁止事項に抵触するので, 許されない.
禁止事項
  • 競技参加者は, いかなる内容であっても, 競技実施中に Twitter や Facebook などの SNS を用いて情報発信することは許されない.
  • 競技参加者は, いかなる方法・内容であっても, 競技実施中に第三者の助けを借りることは許されない.
  • 競技参加者は, メール, チャット, Twitter, LINE やその他の方法で競技実施中に第三者と連絡を取ることは許されない (情報オリンピック日本委員会との連絡を除く).
  • 競技参加者が提出する解答プログラムは, 実行時に標準入出力以外にアクセスしてはならない. 一時ファイルの作成, ネットワークへのアクセス, 外部プログラムの呼び出しは禁止されている.
  • CMS において, 自分自身に割り当てられたアカウントを使用すること. 自分自身に割り当てられたアカウント以外のアカウントへのアクセス権を得ようと試みてはならない.
アピール (異議) 競技時間終了後に採点用入出力データを配布する.
参加者は採点用入出力データを用いて自分の提出したプログラムの動作確認を行うことができる.
競技結果についてアピール (異議) がある場合は, 定められたアピール期間内であれば, アピールを提出することができる. 提出されたアピールに基づき採点をやり直すことがある. 採点をやり直した結果, 参加者の得点は上がることもあれば下がることもある. アピール後の得点が最終的な得点となる.
アピール期間終了後に競技結果が確定する. アピール期間終了後のアピールは認められない.
アピール期間およびアピール提出方法は競技参加者に別途連絡する.
その他 本選競技課題および採点用入出力データは, 後日, 情報オリンピック日本委員会のウェブページで公開する.

本選FAQ

よくある質問とその回答です. 実際にあった質問については, 表現を変更している箇所もあります. 今後, 皆さんから質問がありましたら, その質問と回答を追加していきます.

Q1: どうして本年度の本選では参考資料の閲覧や競技時間中のインターネット検索が許されているのですか?
A1: 会場で開催されていたときの本選では, 参考資料の閲覧や競技時間中のインターネット検索は禁止されており, 競技監督が不正行為をチェックしていました. しかし, オンライン開催となった本年度は競技監督を行うことができませんので, 参考資料の閲覧および競技時間中のインターネット検索を許可することにしました.
Q2: あらかじめスクリプトファイルや C++ のソースコードなどのファイルを作成しておき, 競技中にそれらを使用することはできますか?
A2: 可能です.
Q3: 競技中にインターネット検索でソースコードを入手して, 競技中にそれらを使用することはできますか?
A3: 可能です.
Q4: 競技中に PC にあらかじめインストールされている man や info などのドキュメントを参照してよろしいでしょうか?
A4: 可能です. man や info だけでなく, 参加者は, あらかじめ用意した参考書・ノート・辞書などの資料を参照して競技に参加することも可能です. また, インターネット上で公開されているオンラインドキュメントや資料を検索・参照して競技に利用することができます.
Q5: 言語規定に関してですが, 定められた方法でコンパイルが可能なら, 実装方法などは問わないということでよろしいでしょうか?移植性の無いプログラムを書いても構いませんか?インラインアセンブリを使ってもよいでしょうか?
A5: 競技に使用するコンパイラのサポートしている機能であれば自由に用いることができます. ただし, コンパイラのバージョンやコンパイルオプションに注意してください. 本選競技システムについての詳細は, プラクティスの時間に確認してください.
Q6: 本選競技中, 開発を補助するプログラムやスクリプトを適宜作成実行しても構いませんか?
A6: はい.
Q7: 電卓の使用は可能でしょうか?
A7: 可能です. 電卓だけでなく, 参加者があらかじめ用意した機器を自由に利用することができます.
Q8: 問題文を印刷して競技に参加することは可能でしょうか?
A8: 可能です. 問題文はコンテストシステムより PDF ファイルで配布します. 競技参加者は, もし必要であれば, PDF ファイルを印刷して競技に参加することも可能です.
Q9: 競技用 PC に自分の使い慣れているアプリケーションをインストールして, 本選競技で使用することはできますか?
A9: 可能です. 本年度の本選競技では利用可能アプリケーションに制限はありません.
Q10: 小さなマスコットを PC の横に置いたり, 身につけて本選競技に参加してもよろしいでしょうか.
A10: はい. 小さなマスコットを PC の横に設置して本選競技に参加することができます. また, 小さなマスコットを身につけて本選競技に参加することもできます.
Q11: 本選競技環境におけるコンパイル方法・コンパイルオプションは何でしょうか.
A11: 本選競技で使用できるプログラミング言語は「C++ (C++ のバージョンは C++17)」です. コンパイルオプションは競技システムからも確認できます. 本選競技システムにおけるコンパイルオプションを, 競技中に競技参加者が変更することはできません.
本選競技では以下のコンパイルオプションを使用します.

【g++ (C++)】 -DEVAL -std=gnu++17 -march=native -O2 -pipe -static -s -o 2022-ho-t? 2022-ho-t?.cpp
コンパイル方法(例)
$ g++ -DEVAL -std=gnu++17 -march=native -O2 -pipe -static -s -o 2022-ho-t1 2022-ho-t1.cpp

・コンパイルオプション(補足)
-DEVAL
マクロ名 EVAL を 1 と定めるコンパイルオプション. ソースの先頭に #define EVAL 1 と記述することと同等の意味を持つ. マクロ名 EVAL を用いたソースを書くことで, 手元でのコンパイル結果と本選競技システム上のコンパイル結果を意図的に変えることができる. 例えば, ソース中に
#ifndef EVAL
printf("debug:%d\n",i);
#endif
と書くことで, 手元の実行時にはデバッグ情報を出力して, 本選競技システム上での実行時にはデバッグ情報を出力しない, といったことも可能となる.

-std=gnu++17
g++ において C++17 に準拠した言語仕様でコンパイルする (GNU拡張を有効にする).

-march=native
コンパイラの最適化に関するオプション. 使用するCPU向けの最適化を行う. このオプションの有無によって, プログラムの実行速度が大幅に変わることがある. 手元でコンパイルしてテスト実行する際には, このオプションを常に付けることを勧める.

-O2
コンパイルの最適化に関するオプション. このオプションの有無によって, プログラムの実行速度が大幅に変わることがある. 手元でコンパイルしてテスト実行する際には, このオプションを常に付けることを勧める.

-pipe
コンパイラの実行方法に対するオプション. コンパイル時に一時ファイルを使わずパイプライン処理を行う. このオプションの有無によって, プログラムの実行速度が変わることは基本的にない.

-static
リンカに対するオプション. リンク時に実行バイナリにライブラリが組み込まれる. このオプションの有無によって, プログラムの実行速度が大幅に変わることは基本的にない. 本選競技システムと同一条件でコンパイル・テスト実行するときは, このオプションを付けることを勧める.

-s
リンカに対するオプション. リンク時に実行バイナリからシンボルテーブルと再配置情報を削除する. このオプションの有無によって, プログラムの実行速度が変わることは基本的にない.

詳細は g++ のマニュアル https://gcc.gnu.org/onlinedocs/(英語サイト)を参照.

オープンコンテストについて

オープンコンテスト
2月13日(日)16:00~20:00 (日本時間) に本選競技と同じ課題を使ったオープンコンテストを開催する予定です. オープンコンテストにはどなたでも参加できます.
詳細は オープンコンテストのページ をご覧ください.

個人情報の扱いについて

個人情報の扱いについては, 情報オリンピック日本委員会の「個人情報保護方針」をご覧ください.