情報オリンピックの思い出

はじめに

数学セミナーの2023年7月号に、数学オリンピックの特集があった。その特集の中には、過去の参加者の方々が数学オリンピックの思い出についての記事と、「わたしの1問」という思い出の問題についての記事があった。後者は難しそうなので読まなかったが、前者はたいへんおもしろく読ませていただいた。その特集に感銘を受けた私は、情報オリンピックについても同じことができないだろうかと考えた。

思えば、私が第9回日本情報オリンピックに参加したのは2009年から10年のことなので、もう14年が経つ。情報オリンピックの思い出は、当然、私にとってとても大切なものである。とはいえ、10年以上の年月を経るうちに徐々に色褪せて来てしまっている。まだ、記憶がある程度確かなうちに、書き残しておこうと思い立った。

10年以上も前のことなので、覚え違いもあるかもしれないが、ご容赦いただきたい。

情報オリンピックとの出会い

私が情報オリンピックのことを知ったのは、私が高専1年の2008年のことだった。それは、先生が教室の前に掲示した情報オリンピックのポスターだった。(その前に、情報科の先生がこういう物があると紹介もしていたかもしれない。)そのポスターを見た私は「まだ、プログラミングについてよくわかっていないし、来年になったら参加しよう」と思った。今でもこのことを思い出しては後悔している。当時の私は知らなかったが、高専生が情報オリンピックに参加できるチャンスは2回だけで、そのうちの貴重な1回を私は捨ててしまったのだ。もし、この記事を読んでいるあなたが、情報オリンピックに参加しようかどうか悩んでいるのなら、一旦この記事を読むのをやめて、今すぐに参加登録をしてもらいたい。

情報オリンピックへの貴重な参加を捨てた私は、その年の夏を俗に言うパソコン部で過ごした。この部の主な滑動は、高専プロコンに参加することだったが、1年生にあまり仕事はなかった。暇を持て余した私は、市立図書館にあった柴田望洋さんのJavaによるアルゴリズムとデータ構造を読んだ。このときに身につけた知識が、翌年の情報オリンピックで大いに役に立った。

予選

翌年、2年生になった私はついに情報オリンピックに参加する決意を固めた。高専プロコンが終わった11月ごろから、12月の日本情報オリンピック予選まで、予選の過去問をほぼ全部解いた。当然、わからないものは解説を読んでからである。そのときに、解説の中から再帰動的計画法について学んだ。

ほぼ全て解いたというのは、1問だけ解説を読んでも解けない問題があった。ビンゴという問題である。解説を読んでもさっぱりわからなかったので、部活の顧問の先生に解説を見せ「これわかりますか?」と聞いたら、1時間ほど考えたあとで「ちょっとわからないねぇ」と言われた。部活の先輩たちにも相談したところ、ある先輩がその問題を解くプログラムをインターネットで見つけてきてくれた。Haskellで書いてあった。私の部にはHaskellがわかる人がいなかったので、結局解法を理解しないまま予選当日になった。

予選には情報科専用のパソコン室から参加した。私は6問中の全問に対してプログラムを書くことができた。6問目の解法は、あまり効率のいい方法ではなかったので、プログラムがちゃんと終了するかどうかハラハラしながら待っていた。

予選の結果は6問中5問が完全正解で、残りの1問は全滅だった。間違えたのは2問目で、複雑なことをやろうとして見事に失敗してしまったのだった。予選の問題を全部正解すると賞が貰えたようだったので、とても悔しかった。今でも後悔するポイントその2である。

本選

1問を完全に落としてしまったものの、予選はAランクで通過することができた。本選進出が決まってからは、本選の過去問を全問解いた。かなり大変だったと記憶しているが、それなりの難易度の問題を自力で解けたときはとても嬉しかった。

情報オリンピックの本選は学校の学年末テスト期間に重なっていた。母と姉が入試関連のことで不在だったので、テスト期間前に私は父と二人でご飯を食べる機会があった。そこでわたしたちは焼き肉を食べた。しかし、これが良くなかった。焼き肉でお腹を壊した私は、ひどい腹痛と下痢のなかでテストを受けることになった。はじめの2日はなんとか耐えたものの、これはもうどうしょうもないということで病院に行った。病院の先生には「よくこれでテストを受けたね。僕なら無理だよ」と言われ、薬を出してもらった。

薬でだいぶマシになったものの、腹痛を抱えたまま本選に挑んだ。行きの新幹線の中では、学校の先生に借りた、動的計画法の解説が載った本を読んでいたと思う。まだ、動的計画法への理解が不十分だと考えていたと思う。

本選競技中のことはほとんど覚えていない。腹痛と問題のことで頭がいっぱいだったからだと思う。

先にも述べた通り、競技のことはほとんど覚えていないが、オリンピックセンターの談話室でのことは覚えている。そこでは、日本の各地から来た選手たちが、プログラミングのことについて語り合っていた。ある人はCのマクロについて、またある人は自分が開発しているゲームについて話していた。今思えば、とても貴重な交流だったと思う。

春合宿

本選の結果、私は2問と部分点で成績優秀者に選ばれて、合宿に参加できることになった。合宿に参加する選手の学校は、どれもテレビで見たことがあるような名門校で、私はかなり怯えてしまった。それを母に相談すると、次のような答えが帰ってきた。

それを聞いて安心した私は、合宿までの期間を実にのほほんと過ごした。多分、予選と本選の練習で力を使い果たしてしまっていたのだと思う。もうちょっとちゃんと練習しておけばよかったなと今では思う。

練習はほとんどしていなかったので、競技は散々だったか、合宿は楽しかった。競技時間外には、本選と同じく、プログラミングのことも、それ以外のことも話した。特に、同じく高専生だった人には、自分にしては珍しく積極的に話しかけていた。

特に記憶に残っている出来事は、灘高校の人とお風呂で話したことだ。彼とは灘高の大学受験について聞いた。彼いわく「東大に行って当たり前、京大は医学部じゃないと失敗だと言われる」とのことだった。山口県の片田舎で育った私には大変な衝撃だった。私の地元で京大に受かると、何年にもわたって市内中の噂になるレベルである。大変な学校だと思った。

もう一つ、鮮明に覚えているのは、納豆をかき混ぜる回数を口に出して数える人がいたことだ。頭がいい人はちょっと変わっているんだなと思った。

合宿中にパソコン甲子園ICPCSuperConTopCoderの存在を知ったことは、大げさではあるが、私の人生に大きな影響を与えたと思う。その後、私はこれらに片っ端から参加していって、友達や知り合いを増やした。その人たちの中には、今でもたまに遊びに行く仲の人もいる。あまり社交的でない自分にとって、とても大切な友達だ。就職先も、紆余曲折があったが、プログラミングコンテストに参加していたおかげで見つかった。

すべての競技が終了したあと、谷先生が、当時はまだ珍しかったスマートフォンiPod touchだったかも)に順位を表示して教えてくれたことも覚えている。

最後に

情報オリンピックで、同世代のトップクラスの仲間と交流できたことは、とても貴重な経験だったと大人になった今強く思っている。自分は田舎の秀才だったので、自分より頭の良い同世代の人を実際に見たことがなかった。情報オリンピックに出て初めて、自分より頭のいい人たちを見て、大変な衝撃を受けた。ちょっぴり天狗だった自分の鼻を折るのにピッタリの機会だったと思う。

同じような経験を今の生徒たちにもしてほしくて、当時の自分が本選に行くのにかかったであろう金額を、毎年寄付している。

最近、本選がオンラインになったことを知った。本選の大人数の一夜の交流がなくなったのは残念に思う。しかし、先生方も悩んだ末での結論であるだろうし、私にそれ以上のことを言うことはできない。とある富豪が大金を寄付して、大人数のオンサイトができるようになることを祈っている。