参加を決めるまで
S高1年のmamahiです。
2023年の春に競技プログラミングを始め、日本情報オリンピックでは2回本戦に進出しています。パソコン甲子園の存在は日本情報オリンピックの本選進出条件の項目から知りました。(昨年度まではパソコン甲子園で優勝すると日本情報オリンピックの本選に進出できた)
ある日、プログラミング部でパソコン甲子園の参加者を募集していることを知り、深く考えずにエントリーしました。
予選前日まで
予選の過去問を5年分解きました。
予選通過できるかギリギリぐらいの点数でした。
また、相方との仲を深めるために雑談をしました。(通信制高校なので基本的に会うことがない)
予選当日
1,2,3,4,5,7,8の順で正解しました。
6は最小値と最大値は求められるがその間を判定する方法がひらめけず飛ばしました。
その後10に挑むも失敗。最後の40分くらいで9に挑むも間に合わず。
結果38点。相方は48点。
ギリギリだなと思いました。
本選進出チーム発表日
午前9時頃にふとパソコン甲子園のサイトを見ると結果が発表されていて、恐る恐る見ました。
ものすごく嬉しかったです。嬉しすぎてその日の予定が疎かになってしまいました。反省。
本選出発前日まで
本選の過去問を解き、コーチにフィードバックや解説をもらうというサイクルを繰り返しました。
2024は問題の様子を見るために一人づつ解きました。
2023は前半の簡単な問題を僕が解いて、その間に相方が後半の問題を考えておくという分担をしました。そして、2022は役割を逆にして解きました。
その結果、凍結時点で正解チームが少なかった「順位の予測」、「素数の日の並び」を正解できた僕が後半の問題を考えておく担当になりました。
その後2021まで解きました。
本選Day0
僕の学校は前泊だったので、金曜日の昼頃に集合でした。
合流してからは電車の中でプログラミングトークが弾みました。とても楽しかったです。
夜はホテル近くのラーメン店で夕食を食べました。相方と引率の先生が結構多く食べていて驚きました。とても美味しかったです。
21:10ごろに寝ました。
本選Day1
午前3:00に目が覚めてしまい、二度寝もできず、仕方なく音楽を聴いて過ごしました。
朝食はホテルでバイキングでした。これもまた美味しかったです。
そして会場へ出発しました。ホテルを出発してから開会式の間はとても緊張していました。
そして競技会場へ移動しました。
競技説明を待っている間、相方と会話しているうちに緊張がほぐれました。
そして競技開始。
相方が1から5を正解するまでの間に僕は6から10の考察を進めました。
6と10はわからない、7,8,9は頑張れば行けそうと言った感じでした。
相方が5番を解き終えたあと、僕が9番に挑みましたが、うまくいかず。
その後、相方が6番に挑戦。その間に僕は7番の考察。ふと、2022年の本戦9問目「縄張りの大きさ」を見てコーチが言っていた一言を思い出しました。
「多分1次元のローリングハッシュができた上で、それを2次元に拡張できますかということなんでしょうね」
これは...n次元累積和...!
相方が6を正解し、僕は7番の実装へ。
しかし、実装が難しい。nが変動するので累積和を1次元配列で持つことにしました。また、属性数を変動させるのが面倒だったので、属性数を8で固定。本来ない属性は必ず1で持つようにしました。
かなりの時間を費やし、相方は8番と11番の考察を終えていました。
しかし、この日まだ1問も正解していなかった僕は「1問くらい正解して帰りたいのでこれだけ実装させほしい」と頼み、コードを書き続けました。
そしてとっくに順位表が凍結した17:30ごろ、7のコードが完成しました。提出。結果は不正解。
そして、PCを相方に託し、相方は8番を解き始めました。
僕は間違っているとしたらここだよなと思っているところを確認。
すると包除原理の考え方を間違えていることに気づきました。時刻は17:40。相方が8をバグらせていたので、「2分だけ貸してほしい」と言ってPCを借り、修正して提出。そして相方は8のデバッグへ。
そして、17:45。競技時間終了です。
提出一覧を見ると、最後に送った解答は正解でした。
最高に嬉しかったです。
冗談抜きで競技プログラミング最高の瞬間でした。
そして交流会へ。
夕食がとても美味しかったです。
交流タイムには予選で10完した人がいてびっくりしました。すごすぎる。
夜は自室でABCに参加するも眠すぎて10時に寝ました。
本選Day2
寝坊しました。ご迷惑をお掛けしました。ごめんなさい。
日曜日の朝食も美味しかったです。
そしてモバイル部門の観戦へ行きました。
お題に沿った作品を作ることがとても難しそうだと思いました。
来年はモバイル部門にも参加してみたいと思いました。
あと、カバンに入りきらなかった風船を会津大学の人に押し付け損ねてずっと持っていました。ごめんなさい。
その後解説を聞きました。9番がそこまで方針が遠くなかったため悔しく思いました。
そして表彰式を見学しました。講評の際の審査員特別賞に関するお話を聞いて、日頃のスピード重視のコードは業務だとあまり好ましくないんだろうなと感じ、落ち込みました。
表彰式が終わり、帰りのバスを待つ間、隣のチームの方とトークをして元気を取り戻し、帰りの電車でもプログラミングトークをして、事故・事件なく無事に帰宅しました。
その後
とても楽しかったです!
来年もまた本戦に参加したいと心から思いました。
過去問を解くことは大事だと改めて感じました。
パソコン甲子園が終わっても僕の競技プログラミングの旅路は続きます。
投稿日は日本情報オリンピック二次予選。果たして。