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

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

更新履歴

目次

JOI 本選実施日時

2023年2月5日(日) 14:00 ~ 21:00
2023年2月12日(日) 13:00 ~ 18:30

JOI 2022/2023 本選はオンラインで開催します. 自宅または学校の部室などから参加してください.
インターネット接続環境および開発環境は各自で用意してください.

JOI 本選実施スケジュール

2月5日(日)
14:00~15:00 ガイダンス・開会式
15:00~16:00 講演会
  講師 大槻兼資 先生
     株式会社NTTデータ数理システム (顧問), 東京大学大学院情報理工学系研究科修士課程修了,修士(情報理工学)
     『問題解決力を鍛える! アルゴリズムとデータ構造』『パズルで鍛えるアルゴリズム力』『アルゴリズム的思考力が身につく! プログラミングコンテストAtCoder入門』著者
  講演題目 競プロは人生の役に立つ
  概要 JOI に打ち込んでいる中学生・高校生の皆さんは, 競技プログラミングに楽しく取り組んでいると思います. それは本当に素敵なことです. 競技プログラミングに熱心に取り組むことで, これから大学に入学したり, 社会人になったりしても, 活躍できる世界が大きく広がっていきます. 本講演ではその一端を紹介します. 最後には, 実務で登場した競技プログラミング的問題も紹介します.
16:00~18:00 プラクティス(実機練習)
18:30~21:00 オンライン交流会
2月12日(日)
13:00~17:00 本選競技
17:30~18:30 問題解説 

JOI 本選参加申込方法

JOI 本選に進出した有資格者が JOI 本選に参加するには, 受付システムのマイページより競技者本人による JOI 本選参加申込手続きが必要です.
※一括登録の場合でも, 競技者本人による JOI 本選申込手続きが必要です. 一括代表教員による代行申請は受け付けておりません.

   提出期限 : 2023年1月10日(火)

手続き方法

要再提出という通知が来た場合
登録情報に不備があった場合, 受付システムより要再提出の通知メールが届きます.
受付システムマイページの「JOI 本選情報の確認」で通知内容を確認し, 適切な対応を出来るだけ早めに行ってください.

受付完了の通知が来た場合
JOI 本選の参加申込手続きは完了です.
※ JOI 本選の参加申込期限は 2023年1月10日(火) です. 期限に遅れると JOI 本選に参加できませんので, 必ず, 申込み期限までに参加申込手続きを完了してください.
※ JOI 本選の参加申込手続きは, 一括代表教員による代行申請や, 郵送やメールによる提出は受け付けておりません. 必ず, 競技者本人またはその保護者により, 受付システムマイページからの参加申込手続きをお願いします.

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

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

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

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

本選競技内容

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

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

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

本選競技規則

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

本選競技システムで使われるコンパイルオプション (予定)
【g++ (C++)】 -DEVAL -std=gnu++17 -march=native -O2 -pipe -static -s-o 2023-ho-t? 2023-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 において, 自分自身に割り当てられたアカウントを使用すること. 自分自身に割り当てられたアカウント以外のアカウントへのアクセス権を得ようと試みてはならない.
アピール (異議) 競技時間終了後に採点用入出力データを配布する.
参加者は採点用入出力データを用いて自分の提出したプログラムの動作確認を行うことができる.
競技結果についてアピール (異議) がある場合は, 定められたアピール期間内であれば, アピールを提出することができる. 提出されたアピールに基づき採点をやり直すことがある. 採点をやり直した結果, 参加者の得点は上がることもあれば下がることもある. アピール後の得点が最終的な得点となる.
アピール期間終了後に競技結果が確定する. アピール期間終了後のアピールは認められない.
アピール期間およびアピール提出方法は競技参加者に別途連絡する.
注意事項 (2/23追記) C++ の入出力について
大量の入出力データを扱う課題を解く際に, 入出力の処理に cin, cout ストリームを使用した C++ プログラムは scanf, printf 関数を使用した同等のプログラムに比べて遅くなることがある. 入出力データが多い課題では, cin / cout ストリームを使用して実行時間を超過する場合に, scanf / printf を使用することで入出力を高速化できることがある.

スタック制限について
特に指定のない限り, 競技システムで実行される際のスタックのサイズに制限はない. ただし, 使用されるスタックは, そのプログラムが使用するメモリの一部として扱われるので, 各課題のメモリ制限を超えることはできない. 手元の環境で再帰処理を行うときはスタックオーバーフローに注意すること. 各課題のメモリ制限は CMS で確認できる.
その他 本選競技課題および採点用入出力データは, 後日, 情報オリンピック日本委員会のウェブページで公開する.

本選FAQ

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

Q1: どうして JOI 本選では参考資料の閲覧や競技時間中のインターネット検索が許されているのですか?
A1: 過去に会場で開催されていたときの JOI 本選では, 参考資料の閲覧や競技時間中のインターネット検索は禁止されており, 競技監督が不正行為をチェックしていました. しかし, 競技監督のいないオンライン競技ではそのようなことはできませんので, 本年度の JOI 本選では参考資料の閲覧および競技時間中のインターネット検索を許可することにしました.
Q2: どうして JOI 本選では Python が使用できないのですか?
A2: JOI 本選で Python が使用できない理由は, 主に 2 つあります.
1 つ目は, Python は C++ に比べて実行速度がとても遅く, 実行時間でアルゴリズムの優劣を測る競技では不利になってしまうことです. JOI 本選のような難易度の高い問題が出題される競技では, C++ で満点が取れるアルゴリズムであっても Python ではほとんど点数が付かないということも起こりえます. JOI 本選で Python を使用可能とすると, 競技の公平性を保つことが難しくなってしまうと考えられます.
2 つ目は, JOI がプログラミングを広げる大会であると同時に, 国際情報オリンピック (IOI) 日本代表選手を選抜する大会でもあることです. 日本国内では入門用プログラミング言語として Python が広く親しまれていますが, IOI で使用可能なプログラミング言語は, 現在のところ C++ のみです. そのため, 日本情報オリンピックでは, 一次予選では Python であっても模範解答として想定されている解答であれば満点が取れるように競技課題を設計していますが, 二次予選以降では IOI にあわせていくよう段階的に競技規則を定めています. JOI 2022/2023 では, 本選および春季トレーニングで使用可能なプログラミング言語は C++ のみとなっています.
Q3: あらかじめスクリプトファイルや C++ のソースコードなどのファイルを作成しておき, 競技中にそれらを使用することはできますか?
A3: 可能です.
Q4: 競技中にインターネット検索でソースコードを入手して, 競技中にそれらを使用することはできますか?
A4: 可能です.
Q5: 競技中に PC にあらかじめインストールされている man や info などのドキュメントを参照してよろしいでしょうか?
A5: 可能です. man や info だけでなく, 参加者は, あらかじめ用意した参考書・ノート・辞書などの資料を参照して競技に参加することも可能です. また, インターネット上で公開されているオンラインドキュメントや資料を検索・参照して競技に利用することができます.
Q6: 言語規定に関してですが, 定められた方法でコンパイルが可能なら, 実装方法などは問わないということでよろしいでしょうか?移植性の無いプログラムを書いても構いませんか?インラインアセンブリを使ってもよいでしょうか?
A6: 競技に使用するコンパイラのサポートしている機能であれば自由に用いることができます. ただし, コンパイラのバージョンやコンパイルオプションに注意してください. 本選競技システムについての詳細は, プラクティスの時間に確認してください.
Q7: 本選競技中, 開発を補助するプログラムやスクリプトを適宜作成実行しても構いませんか?
A7: はい.
Q8: 電卓の使用は可能でしょうか?
A8: 可能です. 電卓だけでなく, 参加者があらかじめ用意した機器を自由に利用することができます.
Q9: 問題文を印刷して競技に参加することは可能でしょうか?
A9: 可能です. 問題文はコンテストシステムより PDF ファイルで配布します. 競技参加者は, もし必要であれば, PDF ファイルを印刷して競技に参加することも可能です.
Q10: 競技用 PC に自分の使い慣れているアプリケーションをインストールして, 本選競技で使用することはできますか?
A10: 可能です. 本年度の本選競技では利用可能アプリケーションに制限はありません.
Q11: 小さなマスコットを PC の横に置いたり, 身につけて本選競技に参加してもよろしいでしょうか.
A11: はい. 小さなマスコットを PC の横に設置して本選競技に参加することができます. また, 小さなマスコットを身につけて本選競技に参加することもできます.
Q12: 本選競技環境におけるコンパイル方法・コンパイルオプションは何でしょうか.
A12: 本選競技で使用できるプログラミング言語は「C++ (C++ のバージョンは C++17)」です. コンパイルオプションは競技システムからも確認できます. 本選競技システムにおけるコンパイルオプションを, 競技中に競技参加者が変更することはできません.
本選競技では以下のコンパイルオプションを使用する予定ですs.

【g++ (C++)】 -DEVAL -std=gnu++17 -march=native -O2 -pipe -static -s -o 2023-ho-t? 2023-ho-t?.cpp
コンパイル方法(例)
$ g++ -DEVAL -std=gnu++17 -march=native -O2 -pipe -static -s -o 2023-ho-t1 2023-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/(英語サイト)を参照.

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

オープンコンテスト
2023 年 2 月 12 日 (日) 19:00 ~ 2023 年 2 月 13 日 (月) 19:00 (日本時間) に本選競技と同じ課題を使ったオープンコンテストを開催する予定です.
この時間から自由に連続する 4 時間を選んで参加することが出来ます. オープンコンテストにはどなたでも参加できます.

詳細は オープンコンテストのページ をご覧ください (2月6日更新).

個人情報の扱いについて

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