第24回日本情報オリンピック (JOI 2024/2025) 本選概要

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

更新履歴

  • 2024.12.11 このページを掲出しました. JOI 2024/2025 本選はオンラインで開催されます.
    このページは随時更新しますので, 参加者はときどき参照するようにしてください.
    《注意》 参加者が競技中に生成 AI (ChatGPT, Gemini, Copilot 等) を使用することは禁止されています.生成 AI により生成されたソースを競技サーバに提出する/しないに関わらず,競技中の生成 AI の使用は禁止されています.
    ただし,検索サイト (Google,Yahoo,Bing 等) で検索した際に表示される要約文を利用することや, 翻訳サイト (Google 翻訳や DeepL 等) で問題文を翻訳することは, 生成 AI の使用にはあたらないものとします. 詳細は「質問とその回答」の Q1, Q2, Q3, Q4, Q6, Q7 を確認してください.
    参加者が競技中に SNS (X, Discord, Facebook, ブログ等) を用いて情報発信することは禁止されています.

JOI 本選実施スケジュール

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

1月26日(日)
14:00~15:00 ガイダンス・開会式
15:00~16:00 講演会
  講師 河村彰星 先生(京都大学数理解析研究所准教授)
     トロント大学計算機科学科博士課程修了,Ph.D
     東京大学情報理工学系研究科,同総合文化研究科,九州大学システム情報科学研究院を経て現職.
  講演題目 輪番割当問題
  概要 幾つかある仕事のそれぞれについて,連続する○○日には必ず一度以上やるべしという日数が指定されています.これを満しながら毎日いずれか一つだけ仕事をし続けられるでしょうか.勿論これが可能であるには指定された日数の逆数の和が1以下である必要がありますが,逆にこの逆数和が或る程度小さければ十分であることも判っています.輪番割当(pinwheel scheduling)とよばれるこの問題について,必要条件や十分条件,判定アルゴリズムなどを考えてゆきます.
なお本講義は,講師自身が最近書いた論文とそれに関連する研究動向の解説です.発見や試行錯誤の経緯,うまくいった所,ガッカリだった所,もう少しで解けそうな未解決問題など,研究の進め方に関する裏話もしたいと思います.
16:00~18:00 プラクティス(実機練習)
18:30~19:00 オンライン交流会
2月2日(日)
13:00~17:00 本選競技
17:30~19:00 問題解説 

  • 1月26日(日)のプラクティスは, 競技環境 (コンテストシステムの利用方法など) に慣れることを目的にしています.
  • 1月26日(日)の参加は義務ではなく, プラクティスに参加しなくても失格にはなりませんが, プラクティス不参加による不利益は一切考慮しません.
  • 2025 年 2 月 2 日 (日) 19:00 ~ 2 月 3 日 (月) 19:00 (日本時間) に本選競技と同じ課題を使ったオープンコンテストを開催する予定です. この時間から自由に連続する 4 時間を選んで参加することが出来ます. 詳細はオープンコンテストについてをご覧ください.

JOI 本選参加申込方法

JOI 本選に進出した有資格者が JOI 本選に参加するには, 受付システムのマイページより競技者本人による JOI 本選参加申込手続きが必要です.
詳細は本選実施要領・本選でお知らせします.

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

  • 本選参加者との連絡は, 基本的に, 本選参加者を対象とした Discord サーバを通じて行います (競技中を除く).
  • Discord サーバへの接続方法は2025年1月中旬までに本選参加者に連絡します.
  • 競技中の連絡は, コンテストシステムの「質問 (Questions) 」欄から送ってください.

本選競技内容

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

本選競技規則

競技規則を遵守すること. 競技規則に違反した場合は失格となる.


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

本選競技システムで使われるコンパイルオプション
【g++ (C++)】 -DEVAL -std=gnu++20 -march=native -O2 -pipe -static -s-o 2025-ho-t? 2025-ho-t?.cpp
コンパイルオプションは競技システムからも確認できる.
使用できる用品 筆記用具および計算用紙を使用できる. 筆記用具と計算用紙は各自で用意すること.
競技参加者は, 競技中に小さなマスコットを机の上に置くことができる. 小さなマスコットを身につけて競技に参加することもできる.
使用できる機器・ソフトウェア 参加者は競技中に生成 AI (ChatGPT, Gemini, Copilot 等) を使用してはならない.
ただし,検索サイト (Google,Yahoo,Bing 等) で検索した際に表示される要約文を利用することや, 翻訳サイト (Google 翻訳や DeepL 等) で問題文を翻訳することは, 生成 AI の使用にはあたらないものとする.

生成 AI を除き, 本選競技に使用可能な機器・ソフトウェアに制限は無い. 競技規則の他の禁止事項に抵触しないのであれば,オンライン・オフラインを問わず,生成 AI を除くあらゆるソフトウェアやウェブサービスを利用することができる.

競技参加に必要な機器・ソフトウェアは各自で用意すること.

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

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

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

本選FAQ

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


Q1: どうして生成 AI (ChatGPT, Gemini, Copilot 等) の使用が禁止されているのですか?
A1: 日本情報オリンピック本選では問題内容を理解し, 効率の良いアルゴリズムを設計して, 設計したアルゴリズムを C++ で実装する能力を競う競技です. 生成 AI の使用を許可すると本選競技の対象としている能力を測ることができないため禁止しています.
競技中に利用予定のウェブサイトやソフトウェアが競技規則に違反していないか不明な場合は, あらかじめ本選参加者向けの Discord でお問い合わせください.
Q2: インターネット上の情報を Google で検索すると,生成 AI による要約文が表示される場合があります. これらの要約文を利用して競技に参加することはできますか.
A2: 可能です. 参加者は検索サイト (Google,Yahoo,Bing 等) でインターネット上の情報の検索を行い,検索結果を利用して解答を作成することができます.
本年度の競技規則では,インターネット上の情報を検索サイトで検索した際に表示される要約文を利用することは,生成 AI の使用にはあたらないものとします.
競技中に利用予定のサイトが競技規則に違反していないか不明な場合は, あらかじめ本選参加者向けの Discord でお問い合わせください.
Q3: 私が普段使用している開発環境には, 拡張機能として生成 AI によるコード自動生成機能 (GitHub Copilot) がインストールされています. この機能を利用して競技に参加することはできますか?
A3: できません.いかなる目的であっても, 参加者が競技中に生成 AI を使用することは禁止されています.
普段使用している開発環境に生成 AI によるコード自動生成機能がインストールされている場合は, 競技中はその機能をオフにしてください. または, 他の開発環境を使ってください.
競技中に利用予定の開発環境が競技規則に違反していないか不明な場合は, あらかじめ本選参加者向けの Discord でお問い合わせください.
Q4: 留学生です. 問題部を母国語に変換するために ChatCPT を使うことはできますか?
A4: できません.いかなる目的であっても, 参加者が競技中に生成 AI を使用することは禁止されています.
問題文の翻訳は翻訳サイト (Google 翻訳や DeepL 等) を使ってください.
本年度の競技規則では, 翻訳サイトで問題文の翻訳を行うことは,生成 AI の使用にはあたらないものとします.
競技中に翻訳のために利用予定のウェブサイトやソフトウェアが競技規則に違反していないか不明な場合は, あらかじめ本選参加者向けの Discord でお問い合わせください.
Q5: どうして JOI 本選では Python が使用できないのですか?
A5: JOI 本選で Python が使用できない理由は, 主に 2 つあります.
1 つ目は, Python は C++ に比べて実行速度がとても遅く, 実行時間でアルゴリズムの優劣を測る競技では不利になってしまうことです. JOI 本選のような難易度の高い問題が出題される競技では, C++ で満点が取れるアルゴリズムであっても Python ではほとんど点数が付かないということも起こりえます. JOI 本選で Python を使用可能とすると, 競技の公平性を保つことが難しくなってしまうと考えられます.
2 つ目は, JOI がプログラミングを広げる大会であると同時に, 国際情報オリンピック (IOI) 日本代表選手を選抜する大会でもあることです. 日本国内では入門用プログラミング言語として Python が広く親しまれていますが, IOI で使用可能なプログラミング言語は現在のところ C++ のみです. そのため, 日本情報オリンピックでは, 一次予選では Python であっても模範解答として想定されている解答であれば満点が取れるように競技課題を設計していますが, 二次予選以降では IOI にあわせていくよう段階的に競技規則を定めています. そのため JOI 2024/2025 本選および春季トレーニングでは, 使用可能なプログラミング言語は C++ のみとなっています.
Q6: 自分が Python で書いたソースを C++ に変換するために ChatGPT を使用することはできますか.
A6: できません.いかなる目的であっても, 参加者が競技中に生成 AI を使用することは禁止されています.
Q7: 競技前に生成 AI を使用して生成したソースを手元に保存しておいて, 競技中に利用することはできますか.
A7: 可能です. 生成 AI の使用が禁止されているのは競技中のみです. 競技前に生成 AI を使用することは禁止されていません.
Q8: あらかじめスクリプトファイルや C++ のソースなどのファイルを作成しておき, 競技中にそれらを使用することはできますか?
A8: 可能です.
Q9: 競技中にインターネット検索でソースを入手して, 競技中にそれらを使用することはできますか?
A9: 可能です.
Q10: インターネット上の開発環境 (オンラインコンパイラ等) を利用して競技に参加することはできますか.
A10: アップロードしたソースが第三者の目に触れる可能性のある開発環境を用いることはできません. そうでない場合は使用できます. 例えば, AtCoder の競技システム上のコードテスト機能は使用できます.
使用するオンラインコンパイラにソースを公開する機能がある場合は, その機能をオフにして競技に参加してください.
ただし, ネットワークトラブルにより競技中にオンラインコンパイラが利用できなくなった場合も競技結果の配慮は行いません. 自己責任で使用してください.
競技中に利用予定のオンラインコンパイラが競技規則に違反していないか不明な場合は, あらかじめ本選参加者向けの Discord でお問い合わせください.
Q11: 言語規定に関してですが, 定められた方法でコンパイルが可能なら, 実装方法などは問わないということでよろしいでしょうか?移植性の無いプログラムを書いても構いませんか?インラインアセンブリを使ってもよいでしょうか?
A11: 競技に使用するコンパイラのサポートしている機能であれば自由に用いることができます. ただし, コンパイラのバージョンやコンパイルオプションに注意してください. 本選競技システムについての詳細は, プラクティスの時間に確認してください.
Q12: 本選競技中, 開発を補助するプログラムやスクリプトを適宜作成実行することは可能でしょうか?
A12: 可能です.
Q13: 問題文を印刷して競技に参加することは可能でしょうか?
A13: 可能です. 問題文はコンテストシステムより PDF ファイルで配布します. 競技参加者は, 必要に応じて PDF ファイルを印刷して競技に参加することも可能です.
Q14: 本選競技環境におけるコンパイル方法・コンパイルオプションは何でしょうか.
A14: 本選競技で使用できるプログラミング言語は「C++ (C++ のバージョンは C++20)」です. コンパイルオプションは競技システムからも確認できます. 本選競技システムにおけるコンパイルオプションを, 競技中に競技参加者が変更することはできません.
本選競技では以下のコンパイルオプションを使用する予定です.
コンパイラのバージョンおよび以下のコンパイルオプションは変更されることがあります. 変更されましたら本ウェブページでお知らせします.

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

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

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

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

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

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

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

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

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

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

  • 2025 年 2 月 2 日 (日) 19:00 ~ 2 月 3 日 (月) 19:00 (日本時間) に本選競技と同じ課題を使ったオープンコンテストを開催します.
  • この時間枠から自由に連続する 4 時間を選んで参加することが出来ます. オープンコンテストにはどなたでも参加できます.
  • 詳細は オープンコンテストのページ をご覧ください.

個人情報の扱いについて

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