はじめに
高1の nouka28 です。現在黄色で、競プロ歴は2年くらいです。
高校生からパソコン甲子園というものに出られるということを知り、興味本位で同校の高1 rotti を誘って参加しました。
チーム名は「notti」です。noukaとrottiをつなげた結果こうなりました。
本戦の最終的な結果
PCK予選、本戦どちらも順位表が30分前に凍結されてしまい最終的な結果を見ることができません。(なぜ...)
以下の写真は本選終了30分前で凍結された順位表です。
僕たちのチームは凍結時5位で、その後7を通して、結果5位となりました。
予選
PCKの予選はチーム戦かつ個人戦でもあり(?)、2人が12問のセットを3時間それぞれが解いて、その点数の総和がそのチームの点数となります。
予選では、早解きに成功して、コンテスト前に遅延セグメント木を写経する練習をしていたこともあり、ルービックキューブの問題以外をすべて解くことができました。
チームの合計点数は120点程度となり、予選5位で無事予選を通過しました。
本戦
1日目 - 朝
当日は5時くらいに起きて、6時に家を出て、新幹線などに乗りました。
前日PCKでは TeraPad という謎のエディタしか使えないということを知り、電車の中などではTeraPadをつかって、ABCの過去問を解くなどをしていました。括弧の補完やインデントが改行したときなどにずれてくれるやつ、補完機能など普段当たり前のように使っているような機能が全部搭載されていなくて、コーディング大変だなあと思っていました。
1日目 - 昼
会津若松について、コンビニで弁当を買って、会津大学の食堂で食べました。
会津大学についたとき、荷物と一緒にスマホを預けてしまい、弁当を食べた後、暇だったので開会式まで印刷したライブラリの紙などを見ていました。
1日目 - コンテスト
開会式が終わって、プログラミング部門の人たちはすぐに部屋に案内され、説明を受けて、コンテストが始まりました。
元からrottiに簡単な問題を投げて、自分は難しめな問題の考察をする方針でした。
8から問題を見てって、問題10が一番手を出しやすいと判断し、問題10の考察を始めます。
左端を固定したときに種類数が $x$ になるような位置を尺取り法などで求めて種類数ごとに管理するところまでは良いのですが、クエリで左端が $L$ 未満のところは取れないところを完全に忘れていて、嘘解法だとすぐに気づくことができず、1時間くらいが経過してしまいました。1時間半くらいでやっと自分の嘘解法に気づくことができて、累積和+二分探索を実装して開始2時間くらいでやっと10を解きます(もしここまで時間かけて解けていなかったら多分本当に終わっていた...)
周りのキーボードのタイプ音が非常に気になったり、普段からノートパソコンしか使っていないのであの深く沈むキーボードに慣れることができず、実装and考察スピードが普段より遅くなってしまった気がしています。
この間にrottiが1,2,3,4問目まで通していました(僕が10の実装を始める前に通していたらしい)。5が幾何で解けないといわれたので5を開きます。結局 $\displaystyle \frac{2p}{q}\cdot a=360b$ なる最小の $a$ だとわかるのでgcdを取るとできることがわかります。また、ロッチが6を通します。
ここで2時間半くらいで、rottiに7の考察怪しいといわれたので7の考察and検証をします。
もとの考察が嘘っぽくて、自明な全方位木dpが思いついたので、rottiに写経を任せます。
写経している間、8,9,12の考察をしていましたが、8は何もわからず、9も区間を管理したsetのマージの計算量解析を誤りに気付かなかったため考察が進まず、12はMergeSortTree+平衡二分木のlogが3つつく実装は思いつきますが、明らかにTLに間に合わないと思ったので諦めます。
写経が終わったので7を書き始めます、それっぽいものを書いてサンプルを試すと全然違う答えが出てきます、愚直木dpをやらせると乗せるモノイドの部分は合っていそうだったので全方位木DPの写経ミスだと思い、無限デバッグ編を始めてしまいました。iが1になっている箇所が4か所程度あったので直しながら提出を繰り返すとACを無事取れました。(解説で聞いた木DP、その通りすぎるになってしまった...)
また、rottiが9の考察と実装をしていましたが、マージをナイーブにやっていてオーダーレベルで間違っていたので通りませんでした。
そんなこんなで1~7+10を通してコンテスト終了残り5分程度となり、時間切れだと判断して残りの時間はお祈りをしていました。
1日目 - コンテスト後
夕食会上に向かい、夕食を食べました。
この後デザートでプリンとケーキももらいました、おいしかったです。
交流会では本選の問題の解法や得点、情達の話などをすることができて面白かったです、ありがとうございます。
本当に4時間でもすぐに時間がすぎてしまうし、振り返っても自分はいったい何をしていたんだと思うところが多々あるので、すごい大きな失敗はなかったとはいえ、いろいろ悔いの残る本戦でした。
1日目 - ホテル
ホテルには8時半くらいについて、当時、前回のARCで太陽をして黄から青に落ちてしまったので部屋からABCにratedで出ることにしました。
100-200-300-425-475-500-650 の6完早解きセットで、Eまでを爆速で解けて、Fは1ペナしましたが、32分1ペナで6完でき、無事黄色に復帰することができました。
Gは不可能枠だと判断し撤退して、ロビーに集まってABCに出ている人たちがいるのを知っていたのでロビーに降りました。ロビーでは温泉に誘ってくれた人がいたので温泉に5人くらいで行きました。温泉では競プロなどの話(JOI本選オンサイトにしたい、部活、ChatGPT関連など)をしたのですが、普段界隈の人達と直接話す機会はほとんどないので、とても楽しかったです。
温泉を出た後、他のグループと合流してコンビニによって、ホテルに帰ってきました。
本戦の問題などについての雑談をしていたらいつの間にか2時くらいになっていて、部屋に帰ってしばらくパソコンを開いてABCのGの解説を見るなどをしていましたが、結局眠くてすぐ寝てしまいました。
2日目 - 朝
アラームを4つくらい設定しておいたので6時半くらいに起きました、絶起を何とか回避
ホテル内の朝ごはん会場に行きました。バイキングのような感じで、盛りすぎてしまい全部食べ切るのが大変でした...(もちろん、おいしかったです)
2日目 - 昼
ホテルから会津大学に移動して、午前中はモバイル部門の発表を聞いていました。アプリ開発を全くやったことがない身として、様々なアイディアなどを聞けてよい刺激を得ることができました。
モバイル部門の発表が終わった後本戦の問題の解説が始まりました、解説を聞いて改めていろいろ反省点が見つかりました、来年もっと過去問解いて本戦に臨むべきだなあと思いました。
昼ご飯はカツサンドでした、もうすぐこの本戦も終わってしまうんだなあなどと思いながら食べていました。
昼食後写真撮影をして表彰式で講堂に移動しました。
凍結時と同じで、5位を維持できたのは良かったです。
終わりに
いろいろ悔いが残るコンテストだったので、来年はもっと良い成績が出せるように頑張りたいです、過去問などもちゃんと取り組みたいと思いました。また、PCKの幾何問が苦手な自覚があるのでここら辺の対策もコンテスト前に少ししたいと思ったりしました。
また、今回のPCK本戦ではコンテストはもちろん、様々な人と交流することができてとても楽しかったです。話しかけてくださった方々、ありがとうございました。また、相方のrottiも早解き、写経などの役割分担などをこなせていて助かりました。この大会を機に競プロをやるモチベをかなり上げることができました。これからも精進をさらに頑張りたいと思っています。