第 33 回国際情報オリンピック (IOI 2021)
シンガポール大会 参加報告

日本選手団 団長 米田寛峻


1. 概要

第 33 回国際情報オリンピック (IOI 2021) は、シンガポール共和国を主催国としてオンラインで開催されました。

日本選手団は東京都府中市内の会場(ホテルコンチネンタル府中)に集合し、実機練習や競技を行いました。 開会式と閉会式は YouTube にて配信され、視聴することで参加しました。

競技は 2 日間に分けて行われ、参加者はそれぞれの日の競技で 3 つの問題を 5 時間で解きました。 2 日間の競技の合計点に基づき、成績上位者には金・銀・銅のメダルが授与されました。全参加者の約半数にメダルが授与され、金・銀・銅の割合はおよそ 1 : 2 : 3 と定められています。 今年の大会では、金メダルが 373 点以上を獲得した 30 名(全参加者の約 9 %)に、銀メダルが 289 点以上 371 点以下を獲得した 58 名(全参加者の約 17 %)に、銅メダルが 203 点以上 288 点以下を獲得した 85 名(全参加者の約 24 %)に与えられました。

IOI 2021 における日本代表選手の成績は、金メダル 2 個・銀メダル 2 個でした。


IOI 2021 日本選手団
 日本代表選手
  金メダル  児玉大樹 灘高等学校1年
  金メダル  菅井遼明 渋谷教育学園渋谷高等学校3年
銀メダル  松尾凛太朗  麻布高等学校3年
  銀メダル  渡邉雄斗 渋谷教育学園幕張高等学校2年
 日本選手団役員
  団長 米田寛峻 東京大学1年(IOI 2018 特別参加選手、IOI 2020 選手)
  副団長 星井智仁 東京大学1年(IOI 2020 選手)
  随行員 河原井啓 東京大学4年(IOI 2017 選手)
  米田優峻 東京大学1年(IOI 2018 特別参加選手、IOI 2019・2020 選手)

2. 参加チーム別順位

国際情報オリンピックは個人戦であり、公式データとしての参加チーム別順位は存在しません。 公表された成績に基づいて算出したところ、メダル獲得数による日本の順位は 5 位であり、代表選手の平均得点による日本の順位も 5 位でした。 メダル獲得数・代表選手の平均得点による、1 位から 20 位までの参加チーム別順位は、下表の通りです(同順位内の並びは、平均得点の高い順です)

順位 国・地域 メダル獲得数 順位 国・地域 平均得点
1 位 中華人民共和国 金x4 1 位 中華人民共和国 534.75 点
2 位 アメリカ合衆国 金x3・銀x1 2 位 アメリカ合衆国 417.25 点
シンガポール 3 位 シンガポール 390.75 点
ロシア連邦 4 位 ロシア連邦 386.25 点
5 位 日本 金x2・銀x2 5 位 日本 382.25 点
6 位 クロアチア 金x2・銀x1・銅x1 6 位 イラン 364.50 点
7 位 イラン 金x1・銀x3 7 位 大韓民国 357.75 点
台湾 8 位 カナダ 357.25 点
香港 9 位 台湾 355.50 点
インドネシア 10 位 クロアチア 348.75 点
11 位 大韓民国 金x1・銀x2・銅x1 11 位 香港 334.50 点
カナダ 12 位 インドネシア 328.75 点
13 位 ポーランド 金x1・銀x2 13 位 ポーランド 325.50 点
ウクライナ 14 位 ベトナム 324.50 点
15 位 ルーマニア 金x1・銀x1・銅x2 15 位 ウクライナ 309.75 点
16 位 スロバキア 金x1・銀x1・銅x1 16 位 ルーマニア 303.75 点
17 位 チェコ 金x1・銅x2 17 位 ブルガリア 298.50 点
18 位 オランダ 金x1・銅x1 18 位 スロバキア 287.50 点
19 位 スイス 金x1 19 位 ブラジル 285.25 点
20 位 ベトナム 銀x4 20 位 インド 275.50 点

† なお、中華人民共和国の代表選手 4 名は、それぞれ全体 1 位、2 位、3 位、4 位の結果を残しました。


3. 競技について

国際情報オリンピック (IOI) では、数理情報科学的な問題を解くプログラムを作ることが求められます。 IOI で出題される問題は、最適な答えを求める問題・高速にデータ処理する問題・条件を満たす配置を見つける問題など、様々なタイプの問題が出題されました。 多くの問題が実社会・実生活と関連づけられた設定になっていることも、IOI の一つの特徴です。

各問題には、プログラムの実行時間の制限・メモリ使用量の制限が規定されており、プログラムの性能や効率性に応じて得点が付けられます。高得点を取るためには、効率的なアルゴリズムを設計し、これをプログラムとして適切に実装する必要があります。 そのため IOI では、アルゴリズムやデータ構造の知識、効率的な解法を設計するための傑出した数理的考察力、そして複雑なプログラムを適切に書く卓越した実装力のすべてが求められています。 選手はこれらの能力を総動員し、ハイレベルな課題に対して、5 時間の競技中にじっくりと取り組むことが要求されます。

選手は、与えられた開発環境を用いて C++ のプログラムを作成し、これを競技サーバーへ提出します。提出したプログラムは自動採点され、選手はすぐに得点を知ることができます。 競技時間内であれば、プログラムを修正して再提出することができます。再提出の回数は各問題につき 50 回までと決められていますが、事実上これは無制限です。

IOI 2021 では、以下の 6 問が出題されました。それぞれの課題の配点は 100 点ずつで、合計 600 点満点です。各課題はいくつかの小課題に分割されており、プログラムの性能や効率性に応じて評価される仕組みになっています。

IOI 2021 競技課題
 競技 1 日目    キャンディー配り (Distributing Candies)
  鍵 (Keys)
  噴水のある公園 (Fountain Parks)
 競技 2 日目 遺伝子操作 (Mutating DNA)
  ダンジョンゲーム (Dungeons Game)
  ビットレジスタ (Bit Shift Registers)

IOI で出題される各問題は、基本的に Batch 形式(入力が与えられて答えを出力する形式)、Communication 形式(プログラム同士で通信する形式)、Output Only 形式(手元でプログラムを実行し、できるだけい良い解を求める)のいずれかです ほとんどの競技プログラミングの問題は基本的に Batch 形式なのに対し、例年 2 問程度 Communication 形式や Output Only 形式の特殊な問題があるのは、IOI の特徴の一つです。しかし,今年は「ビットレジスタ」を除く 5 問が Batch 形式でした。

出題された問題について特筆すべき点は、以下の 3 点です。

また、参加者 351 人全員が 1 点以上を獲得しました。これは、記録が残る 2006 年以降で初めてのことです。なお、600 点満点を獲得したのは全体で 1 人だけでした。

競技の実施方式などについては、IOI 2021 では以下のようになりました。

  1. 競技実施方式 : 本年はオンラインでの開催ということで、選手は各国内から競技に参加しました。各国で準備した PC 上で配布された仮想マシンを動作させるという方式で行われたため、ハードウェアの性能は参加チームによって異なったかもしれませんが、ソフトウェアの環境はすべての選手で統一されました。 すべての国で同時に競技が実施され、2 日とも日本時間では 19 時 ~ 24 時 の 5 時間であった。深夜まで全力を尽くした選手たちに敬意を払いたいです。 例年公開されていたリアルタイムの順位表は、今年は昨年同様、不正行為防止を主目的として各日競技終了まで公開されませんでした。

  2. 競技規則の変更 : IOI 2021 で使用できるプログラミング言語は C++ のみになりました。なお、昨年大会まではプログラミング言語 JAVA が使用できました。

  3. 問題形式 : 昨年大会に引き続き、IOI 2021 で出題された課題の形式は、与えられたデータを処理する関数を実装したソースファイルを提出する方式(プロシージャ方式)でした。 提出されたソースファイルは競技システム上ですぐにコンパイル・実行・評価されます。競技参加者にフィードバックが返され、自分の得点を知ることができます(現在の競技規則では、すべての提出に対して完全なフィードバックがあることが明記されています)。 満点でなかった場合は、どの小課題で失点したかを知ることができます。

  4. 競技システム : 競技時間中、選手には競技用 PC が 1 人 1 台与えられました。選手の PC には開発環境と、競技システムにアクセスするためのウェブブラウザがインストールされていました。 また VPN によりコンテストのネットワークに接続されており、主催者側から PC の状態を監視・制御することができるようになっていました。技術委員の努力に深く感謝したいです。 競技システムは、去年の IOI と同様に CMS が用いられました。インターフェースは簡潔で、また JOI 本選や春合宿等でも使用していることもあり、その使い方については選手が自ずと理解できたようでした。

  5. 翻訳 : 競技日当日の 13 時 ~ 17 時に、日本選手団役員により問題文の翻訳が行われました。なお、「ビットレジスタ」の問題文が過去 8 年間で最長だったため、競技 2 日目の翻訳の終了時刻は 15 分延長されました。 今年の翻訳システムも従来通り Markdown 形式のもので、すべての編集がサーバー上に保存され、使いやすいものでした。 英語版問題文の修正提案と変更連絡は、Element というチャットツールを用いて行われ、発言の記録がすべて残るため議論に参加しやすい仕組みでした。 日本選手団役員が行った修正提案は 6 ヶ所採用され、これは全採用提案のうち約半分にあたりました。

4. その他・感想など

まず、世界中が大変な状況下にあるのにもかかわらず、2 年連続で IOI を開催してくださったシンガポールのホストに感謝します。

新型コロナウイルス感染症 (COVID-19) の世界的な感染拡大の影響で、IOI 2020 に引き続き完全オンラインでの開催となりました。 しかしながら、昨年の大会とは大きく変わりました。IOI 2020 では「最小限の規模でもいいから、競技だけはやり遂げる」という方針でしたが、IOI 2021 では「オンラインであること以外は普段通りの IOI」が目指されていました。 実際に、現地での観光(エクスカーション)の代わりに「バーチャル観光ツアー」が行われたり、「CodeCombat Competition」というイベントが行われたりしました。

しかし、オンラインであるがゆえに、各国の選手同士の交流がほとんど行われておらず、競技だけにしか参加しなかった代表選手も多かったと感じます。日本でも、大会期間中に高校に通っていた人もいたようで、IOI の実感が例年に比べて少なかったのではないかと思いました。 例年のオンサイト開催の価値を改めて感じたものの、もし来年も IOI がオンライン開催になるのであれば、ここは改善すべき課題であるように感じました。

IOI Regulations の法規 1.7 には、IOI の主な目的の一つとして「情報科学にたずさわる人々の友好的な国際関係を促進すること」が書かれています。 しかし、もしオンラインの状況が続けば、IOI の目的が競技だけに一極集中するのではないかとも思いました。確かに競技は一番重要なことですが、IOI の大会に参加すること自体の意味をより多様に感じられるものになってほしいなと思いました。

ただ、昨年大会よりも充実しており、さらに競技システムの面では例年になく安定していたことは、大いに評価しています。また、オンラインなりの良さもあることに気づかされました。 各国選手団の役員が連絡手段として Element というチャットツールが使われていましたが、これはオンサイトになっても残すべきだという意見もありました。

最後にもう一度、例年とは異なるオンライン開催にもかかわらず、IOI 2020・2021 をともに成功に導いたシンガポールのホストに改めて感謝します。


5. おわりに

今年の日本代表は金メダル 2 個、銀メダル 2 個というすばらしい結果で、国別ランキングでも 2018 年以降では最高の成績をおさめることができました。 今回、IOI 2021 への選手団派遣を無事に終えることができましたのは、日頃より情報オリンピックの活動にご支援をいただいている皆様のお陰です。

この場を借りてお礼を申し上げます。どうもありがとうございました。今後ともよろしくお願いします。