プログラミングや情報科学についての知識・技術を競う中高生対象の大会「日本情報オリンピック(JOI)」に、今年も開成学園コンピューター部の生徒が出場しました。
今年の日本情報オリンピックには全国から1,266名の生徒が参加し、9月から12月にかけて、一次予選、二次予選が行われ、上位80名が2月8日(土)、9日(日)に茨城県つくば市の会場で行われた本選に出場しました。
開成学園コンピューター部からは,米田寛峻君(高2)、神尾悠陽君(高1)、綿貫晃雅君(高1)の3名が本選に進出しました。その結果、米田寛峻君が全体3位で銅メダルを獲得しました。また、神尾悠陽君は、上位20位に入り優秀賞を獲得しました。綿貫晃雅君は惜しくも優秀賞には届きませんでしたが、健闘しました。
本選での成績優秀者20名は、3/19(木)~3/24(火)に行われる代表選考合宿に招待されます。そして、代表選考合宿の成績上位4名が、今年7月にシンガポールにて行われる「国際情報オリンピック2020」の日本チームの選手となります。
日本情報オリンピックの問題の出題例
日本情報オリンピックでは、次のような問題が出題されています。ここでは3つ例を挙げますが、段々レベルが上がっていきます。問題例3はかなり難しいですが、ぜひ挑戦してみましょう。
【問題例1「3つの整数」 (JOI 2019/2020 1次予選 第1回 問題1)】
3つの数字が空白区切りで入力される。それぞれの数字は1または2である。1と2のどちらの個数の方が多いか求めるプログラムを作ってください。
例えば「1 2 1」と入力された場合、1の個数の方が多いので、「1」と答えなければなりません。
【問題例2「最頻値」 (JOI 2019/2020 1次予選 第2回 問題3)】
整数N, M(N, M は100以下)と、N個の1以上M以下の整数A1, A2, …, ANが入力される。
A1, A2, …, ANのなかで、一番多く出現している数は、いくつ出現しているでしょうか? これを求めるプログラムを作ってください。
例えば、N=5, M=4, (A1, A2, …, A5)=(4, 1, 1, 2, 1) の場合、1が3つ出現しているので、「3」と答えなければなりません。
【問題例3「桁和」 (JOI 2019/2020 2次予選 問題3)】
整数N(Nは100 万以下)が入力される。
JOI君は1以上N以下のある整数を持っていた。その後、「持っている数に、持っている数の各桁の和を足す」という操作を何回か行ったら、Nになった。このとき、最初に持っていた数としてありうるものがいくつあるかを求めるプログラムを作ってください。
例えば、「107」が入力された場合を考えてみましょう。例えば、最初にJOI君が持っていた数が70のとき、70→77→91→101→103→107と進み、73のときは、73→83→94→107と進みます。これを含め、JOI君が最初に持っていた可能性のある数は1, 2, 4, 7, 8, 14, 16, 19,…, 101, 103, 107の34個なので、「34」と答えなければなりません。