JOIG に挑戦しよう! ~出題内容から勉強法まで~

このページでは「JOIG にはどんな問題が出るの?」「どうやって勉強すればいいの?」といった皆さんの疑問を解決します。

情報オリンピックの過去問を見てみよう

情報オリンピックは 競技プログラミング と呼ばれる分野の中高生向けコンテストです。プログラミングを使って、時間内により多くの問題を解くことを目指します。実際にはどのような問題が出題されているのでしょうか。早速ですが、これまで開催されてきた日本情報オリンピック (JOI) の過去問を見てみましょう。

水道料金

2014 年 12 月実施・JOI 2014/2015 予選 問題1 (改)

問題文

あなたが住んでいる地域には水道会社が \(X\) 社と \(Y\) 社の \(2\) つあります。\(2\) つの会社の \(1\) ヶ月の水道料金は、\(1\) ヶ月の水道の使用量に応じて次のように決まります。

  • \(X\) 社:\(1\) リットル あたり \(A\) 円かかる。
  • \(Y\) 社:基本料金は \(B\) 円である。使用量が \(C\) リットル以下ならば、料金は基本料金 \(B\) 円のみがかかる。使用量が \(C\) リットルを超えると基本料金 \(B\) 円に加えて追加料金がかかる。追加料金は使用量が \(C\) リットルを \(1\) リットル超えるごとに \(D\) 円である。

あなたの家では \(1\) ヶ月の水道の使用量が \(P\) リットルであるとします。水道料金ができるだけ安くなるように水道会社を選ぶとき、家の \(1\) ヶ月の水道料金をいくらになるでしょうか。

ただし、\(A,B,C,D,P\) はすべて \(1\) 以上 \(10\,000\) の整数とします。

入力
入力は \(5\) 行とし、各行の内容は上から順に \(A,B,C,D,P\) とします。
出力

家の \(1\) ヶ月の水道料金を出力してください。

数年前の電力自由化に伴い、電気料金を比較するウェブページを見たことがある人も多いのではないでしょうか。それと似たような設定の問題です。

例えば、次のような入力を考えてみましょう。

9
100
20
3
10

つまり、あなたの家では \(P = 10\) リットルの水が使われています。よって、\(X\) 社の水道料金は \(A \times P = 9 \times 10 = 90\) 円です。対して、使用量が \(C = 20\) リットル以下なので、\(Y\) 社の水道料金は基本料金のみの \(B = 100\) 円になります。安いのは \(X\) 社の \(90\) 円なので、

90

とプログラムが出力しなければなりません。

この問題の解答プログラムを実際に作成してみました。次のテキストエリアに様々な入力を入れて、プログラムが正しく動作している様子を感じてください。

このような問題は手計算で解決することも可能なとても簡単なものです。しかし、どんな入力に対してもすぐに答えを求めてくれるプログラム、いわばこの問題専用の電卓のようなものを作成することが求められています。

まとめ

  • 情報オリンピックでは現実世界と関連した設定の問題も多く出題されています。
  • どんな入力が与えられても正しい答えを求めることができる「プログラム」を作成する必要があります。

JOIG に向けた勉強法・教材

競技プログラミングを今から始めるなら

JOI 入門講座で使用する JOI 公式テキストを、下記のJOI 入門講座募集ページにて無料で公開しています。C++ の基礎を JOI の過去問も活用しながら丁寧に解説しています。

JOI の予選も実施されているプログラミングサイト AtCoder では、プログラミング言語 C++ の入門教材 APG4b が無料で公開されています。

過去問を通して学ぶなら

プログラミングサイト AtCoder において、JOI 過去問 が無料で公開されています。

また、有志によって JOI 過去問に非公式の難易度を付ける取り組みも行われており、ウェブページ AOJ/AtCoder-JOI において難易度順で問題に取り組むことができます。

書籍で本格的に学ぶなら

以下は、プログラミングがある程度できることを前提として、プログラミングをどう使えば問題が解決できるかについて説明している書籍です。

JOI 入門講座 (毎月開催)

JOI 入門講座は、JOI や JOIG への参加を目指す中高生対象のプログラミング講習会です。性別問わず参加できます。プログラミングのいろはを学びます。講義と演習を組み合わせて実施し、演習時には大学生・大学院生のチューターから個別に指導を受けることができます。

詳しくはJOI 入門講座募集ページをご覧ください。(2021年9月より有料となりました。)