日本情報オリンピック(JOI)参加記

高二 萩原 活動報告JOI競技プログラミング

情報オリンピックの概要

日本情報オリンピックは高二までの日本一の競技プログラマーを決める大会です。 一次予選、二次予選、本選、春季トレーニングとあり、春季トレーニングの上位4名が国際情報オリンピックに出場できるようです。

競技プログラミングというのは、ある問題が与えられその問題を解決するプログラムをできるだけ早く作成し、提出する競技です。 例えば、

1
2つの文字列 S , T が与えられる。文字列 S の順序を並び替えて文字列 T と等しくできるならば Yes できないならば No を出力せよ

といったものです。プログラミングの基本的な知識やアルゴリズムの知識、そしてそれらを正しく扱えるかが試されます。

  • 1次予選について 一次予選は四則演算や条件、繰り返し等を正しく扱えるかが試されます。一次予選は3回行われ、どれか一つのコンテストで条件を満たせば二次予選へ進めます。 参加者の半分以上が1次予選を通過するようです。

  • 2次予選について 2次予選からはデータ構造やアルゴリズムを扱う力が必要になってきます。また、二次予選以降は問題に、条件が小さくなった小課題いくつか設定され、問題が解けなくとも、小課題をクリアすればその分の部分点が与えられます。 ここで参加者の1割程度にまで絞られます。

  • 本選について 本選は二日間かけて行われます。1日目は開会式やプラクティス、交流会などが行われ、2日目に本選競技とその解説が行われます。

一次予選、二次予選は AtCoder というサイト上で行われますが、本選からは joi 独自のサイト上で行われます。また、使用できるプログラミング言語も、一次予選や二次予選は幅広い中から得意なものを選んで使用することができましたが、本選は C++ しか使用できません。扱う数値や要素数が大きくなり、難易度が大きく上がります。本選の上位30名が春季トレーニングに参加できます。

本選参加までにやったこと

AtCoder というサイトで毎週土曜日に開催される AtCoder Beginner Contest に参加したり、同サイト上で公開されている JOI の過去問を解いたりしました。またQiitaというサイトでアルゴリズムについての解説等を書いている方々がいるので、それを読んで学習したりしました。

結果

一次予選は3回のうちすべて参加し、すべて満点でした。

二次予選は五問中三問が100点、4問目が小課題1のみクリアし 317 点でした。

本選は、1問目は解けたのですが、2問目でダイクストラ法を使って解くところを幅優先探索を使ってしまったり、オーバーフローを見落としていたりしてつまずき、100点でした。

感想

元々競技プログラミングは、Arduinoのプログラミングが上達するかもと考え始めました。日本情報オリンピックへの2回目の参加で、前回は2次予選で敗退してしまいましたが、この1年間勉強し、本戦出場を果たすことができ、自己の成長を実感できました。残念ながら入賞とはなりませんでしたが、情報オリンピックを通じてプログラミングのスキルが大きく向上し、様々な新しいアルゴリズムを習得することができました。高校2年生までが情報オリンピックへの参加資格であるため、これが最後の機会でしたが、同世代のトップ選手と交流できたことは、貴重な経験でした。大学進学後は、ICPCにも挑戦していきたいと思っており、この経験を無駄にせずに、精進していきたいと思います。


前へT-STEAM:Pro 2022 総合、競技部門で優勝しました>