情報オリンピックは高校生以下を対象としたプログラミングコンテストです。プログラミングを使って、時間内により多くの問題を解くことを目指します。このような分野は競技プログラミングとも呼ばれています。
このページでは、情報オリンピックにまつわる「どんな問題が出るの?」「どうやって勉強すればいいの?」といった皆さんの疑問を解決します。
実際にどのような問題が出題されているのでしょうか。まずは日本情報オリンピック (JOI) の過去問を見てみましょう。
2014 年 12 月実施・JOI 2014/2015 予選 問題1 (改)
あなたが住んでいる地域には水道会社が \(X\) 社と \(Y\) 社の \(2\) つあります。\(2\) つの会社の \(1\) ヶ月の水道料金は、\(1\) ヶ月の水道の使用量に応じて次のように決まります。
あなたの家では \(1\) ヶ月の水道の使用量が \(P\) リットルであるとします。水道料金ができるだけ安くなるように水道会社を選ぶとき、家の \(1\) ヶ月の水道料金をいくらになるでしょうか。
ただし、\(A,B,C,D,P\) はすべて \(1\) 以上 \(10\,000\) の整数とします。
入力は \(5\) 行とし、各行の内容は上から順に \(A,B,C,D,P\) とします。
家の \(1\) ヶ月の水道料金を出力してください。
数年前の電力自由化に伴い、電気料金を比較するウェブページを見たことがある人も多いのではないでしょうか。それと似たような設定の問題です。
例えば、次のような入力を考えてみましょう。
つまり、あなたの家では \(P = 10\) リットルの水が使われています。よって、\(X\) 社の水道料金は \(A \times P = 9 \times 10 = 90\) 円です。対して、使用量が \(C = 20\) リットル以下なので、\(Y\) 社の水道料金は基本料金のみの \(B = 100\) 円になります。安いのは \(X\) 社の \(90\) 円なので、
とプログラムが出力しなければなりません。
この問題の解答プログラムを実際に作成してみました。次のテキストエリアに様々な入力を入れて、プログラムが正しく動作している様子を感じてください。
このような問題は手計算で解決することも可能なとても簡単なものです。しかし、どんな入力に対してもすぐに答えを求めてくれるプログラム、いわばこの問題専用の電卓のようなものを作成することが求められています。
現在、日本に在住する皆さんが参加できる可能性があるのは、
の 5 つです。この中でも JOI と IOI の流れを紹介します。
JOI は、一次予選、二次予選、本選、春季トレーニングの 4 つのコンテストで構成されています。
一次予選は誰でも参加することができます。一次予選は 9 月、10 月、11 月の 3 回実施されています。何度でも参加でき、いずれか 1 回で良い成績を収めれば大丈夫です。
具体的には、80 分で 4 問の課題に取り組みます。3 問以上解くことができると「繰り返しを含む基本的なプログラムを適切に書くことができる者」として認定され、敢闘賞が授与されます。また、二次予選に進出することができます。
一次予選はオンラインで開催されています。学校のコンピュータ室や自宅から無料で参加できます。
一次予選では基本的なプログラミングスキルが問われています。まずはプログラミング言語を 1 つ使いこなせるようになりましょう。一次予選では 60 種類以上のプログラミング言語の中から自由に選ぶことができます。
二次予選は 12 月に実施されていて、3 時間で 5 問に取り組みます。上位に入るなど特定の条件を満たすと、本選に進出することができます。
一次予選ではプログラミングスキルが問われていたのに対し、二次予選以降ではアルゴリズムやデータ構造の知識と発想も問われてきます。例えば、日本語でどんなに難しい単語や表現を知っていても、良い文章が書けるとは限りませんよね。プログラムはコンピュータに対する指示で、プログラミング言語はその指示を表すための言葉です。プログラミング言語についていくら詳しくても、肝心な指示の中身が間違っていたり、効率が悪いと、二次予選以降を勝ち抜くのは難しくなってきます。
本選は通常 2 月に実施されていて、4 時間で 5 問に取り組みます。上位者は春季トレーニングに招待されます。
本選では二次予選と比べて難しいアルゴリズムの知識や、そのアルゴリズムを与えられた課題に適用させるための高度な発想力が問われます。
春季トレーニングは IOI 日本代表を決めるための代表選抜会です。3 月に実施されていて、4 日間連続で毎日 5 時間の競技に取り組みます。上位 4 人は IOI 日本代表として派遣されることになります。
なお、春季トレーニングで使えるプログラミング言語は C++ のみです。
日本代表となった 4 人は IOI に参加します。80 以上の国と地域から参加する 300 人以上の選手と腕を競い合います。競技は 2 日間ですが、中日にはエクスカーションなども実施されています。
IOI 中の様子は、例えば IOI 2019 写真速報 で見ることができます。
情報オリンピック日本委員会では、プログラミング未経験者や初心者を対象として JOI 入門講座を毎月実施しています。プログラミングの始め方から丁寧に解説します。少人数グループに 1 人ずつ学生チューターが割り当てられて、個別に指導を受けることができます。また、レベル別で 3 つのコースを用意していて、とても参加しやすくなっています。
情報オリンピック日本委員会では、各地の大学の先生方とコラボして、毎年夏休み期間中に、日本情報オリンピック予選参加をめざす中高生を対象に、プログラミングとアルゴリズムの基礎的な講習会「レギオ」を開催しています。
情報オリンピック日本委員会では、プログラミングをある程度マスターした中高生を対象として、アルゴリズムの指導を行う夏季セミナー(8月)と春季セミナー(3月)を実施しています。
・春季セミナー(2024年3月)の概要はこちら(イベント管理サービス「peatix」のサイトに遷移します)
・夏季セミナー(2023年8月)の概要はこちら(イベント管理サービス「peatix」のサイトに遷移します)
・夏季セミナー(2023年8月)での講演資料はこちら
プログラミングサイト AtCoder において、JOI 過去問 のオンラインジャッジ (自動採点システム) が無料で公開されています。JOI の予選も AtCoder で実施されているため、実際の競技のシステムに予め慣れておくことができます。
また、有志によって JOI 過去問に非公式の難易度を付ける取り組みも行われており、ウェブページ AOJ/AtCoder-JOI において難易度順で問題に取り組むことができます。
過去問の原本と多くの問題の解説は情報オリンピック日本委員会のウェブサイトで閲覧できます。
以下は、プログラミングがある程度できることを前提として、プログラミングをどう使えば問題が解決できるか、つまりアルゴリズムについて説明している書籍です。一次予選の問題が解けるようになったら取り組んでみましょう。
プログラミングの勉強を始めたら、まずは JOI の一次予選に参加してみましょう。易しい問題も含まれていますし、参加料は無料です。
参加の申し込みは情報オリンピック日本委員会のウェブサイトから行ってください。