ICPC 2022 Asia Yokohama Regional 参加記

出場決定

ICPCは入学前から憧れの大会でした。弊部(阪大競技プログラミング部「RAINBOU」)では希望者に向けてレーティング順での自動チーム編成を行っており、今年はkuhaku先輩とPro_ktmr先輩とともにチーム「Girigiri_yellows」を結成して挑みました。チームメイトのおかげもあって6位という高順位で通過し、アジア地区予選も無事オンサイトでの開催が決まりました。私の競プロ人生で最もテンションが上った瞬間はJOI'19の二次予選を全完したときとICPC'22の国内予選で6完したときの2つです。

準備

年末はホテルのダイナミックプライシングが激しいため、コーチのBadlylucky先輩とホテル探しが大好きなkotamanegi先輩に計画を立てていただいて10月上旬には阪大7人全員分のホテルを押さえました。ホテル決めの経緯はプロフェッショナル ICPCコーチの流儀 - BsBsこうしょうに詳しく書かれています。有能なコーチに恵まれてありがたいものです。ちなみに僕はこの時点でコミックマーケット101への参加も決断していたため、同時に28,29,30の3泊分のホテルを新橋に押さえていました。

2ヶ月前になると学割を使って新幹線も押さえました。ここでもkotamanegi先輩にかかりきりになりました。

本番は電子情報を持ち込むことができないため、ライブラリの準備をしました。10月からゆっくり作っていましたが、ゆっくり過ぎて全ては作りきれず、またICPC用というよりはAtCoder用の多機能構成で作ったためこれはあまり尽くせませんでした。足りない分はLuzhiled's Libraryをそのまま持ってきました。使うものをmarkdownに纏めてpandocで生成したPDFを印刷しました。ソースが複数ある場合のフローとかが出てきて脳死で参照することがあるので一応土壇場用に蟻本も持っていきました。

1日目

1日目は大阪から新幹線で移動しました。誰も遅刻しなくてよかったです。

会場につくとTシャツの着用を求められ、開会式が始まりました。オンサイト経験がJOI1回しかないので顔は全然認知できていませんが、この中にたくさんの凄腕競プロerがいるんだなと思うと身が引き締まりました。

リハーサルの問題は簡単(チームメンバーによるとインタラクティブのB問題以外例年と同一?)でしたが、インタラクティブでのflush忘れの挙動や印刷の試験などを行いました。でかいファイルを印刷してしまったらどうなるか気になったので適当な画像ファイルを生成して印刷してみました。文字化けしたテキストを持ってきてくれましたが、5枚だけでした。でかいファイルを印刷してしまっても途中で止まってくれることがわかりました。

1日目は解散後の他校との交流はほとんどなく、阪大メンバーでホテルに入りました。夕食を20時で予約していましたが遅すぎたので早めてもらいました。

夕食は中華街で食べました。美味しかったです。2日目の解散後に個人で横浜観光をしている時間はないとわかっていたのでお土産の買い物だけ軽く行いました。冗談交じり(?)にゲームセンターに行く提案がなされ、行ってみました。他校の競プロerは誰もいませんでした。

22:40頃に就寝しました。

2日目(コンテスト前)

5:50 頃に起床しました。

僕がAを見てる間にPro_ktmr先輩がCLionのアクティベートやテンプレートの打ち込みをやってくれると言ってくれていたので、急いでそのマニュアルを作ってコンビニで印刷しました。 ホテルで朝食を食べ、あさかつに参加して頭をスッキリさせ、集合して会場に向かいました。 割とすぐにコンテストが始まりました。

2日目(コンテスト中)

kuhaku先輩にBを見てもらい、僕はAを見ました。Aは見るからに区間スケジューリング問題でした。Pro_ktmr先輩にCLionのアクティベートとDOM Judgeへのログインを済ませていただき、早速コーディングしました。僕は早解き寄りの競プロerではあったためFAの企業賞を取れるといいなと思っていましたが、イベントをPriorityQueueで管理するやや過剰な実装になってしまい、しかも回答する番号をソート済みのものにしてしまうといったミスで結局2ペナ22分という酷い出だしとなってしまいました。

Aが解けた頃にはkuhaku先輩がBの考察を終わらせていたので交代してBを実装してもらいました。 1ペナを生やして47分時点でACしました。

Cの問題をPro_ktmr先輩に説明してもらいました。フローの雰囲気はあるけど二重に閉めないといけないしよくわからないという感じで飛ばしました。 Dは解けるだろうけど面倒そうだという感じでした。 Eの問題を読みましたが、よくわかりませんでした。DP以外に考えられないけど何これという感じ。

この時点で順位表を見て、Gが簡単そう、DとFもそれほど強くないチームでも通してるのでできそうという感じでした。

Pro_ktmr先輩がGを解けると言ってくれたのでGを実装してもらいました。 kuhaku先輩はFを考えていました。 僕は中途半端にFのkuhaku先輩の断片考察を聞いたりDを見たりしていました。

DはPro_ktmr先輩も解けると言っていましたが、僕がロリハを使ったほうが楽だと無駄な主張をしたのでDを担当させていただきました。 Gの実装も難航していたので一旦印刷をしてバグを見てもらいながらDのロリハ激長実装のためにModintを書いたりいろいろやって頑張って書いていました。バグらせました。 DとGでお互いバグっていたので印刷してバグ探し→見つけたら交代を繰り返していました。 3:10時点でやっとGが通りました。Dでロリハを使ってバグらせている旨をPro_ktmr先輩に説明して、ハッシュを使わずに普通に比較して良い事に気づきました。ACしました。ほんとうにすみませんでした。

Pro_ktmr先輩がEの考察を進め、2Dセグ木があれば解けるという話をしていました。実際には3N本のセグ木で十分で、Pro_ktmr先輩が持っていた「使うところだけノードを作るセグ木」を利用することになりました。タイピングだけはチーム内で速かったので写経はやらせてもらいました。 サンプルも通ったので提出…!REでした。使うところだけとはいえNがでかすぎるのでメモリ確保に失敗しているだろうという話になりました。実際手元で試してもセグフォりました。真面目に必要なクエリを先に計算して座標圧縮してからセグ木を組み立てると通るという目論見が立ちましたが、すでにコンテスト時間が足りませんでした。

ここまでFの考察を進めていたkuhaku先輩がFのそれっぽいbitset高速化DP解を思いつきました。証明はできませんがなんとなくそれっぽいという話になり、実装量も少ないので手詰まりのEに割り込んで書いてみました。サンプルすら通りませんでした。

コンテストが終了しました。遅めの4完で27位。いい成績とは言えませんでした。Eは通りかけだったので悔しかったです。

2日目(コンテスト後)

早速問題講評が始まりました。ジャッジ陣の錚々たる面々による解説に震えました。Eはこちらと同じ方針だったので、やはり詰めが甘かっただけということになり悲しみました。Fは納得の解説でしたが、全然届いていませんでした。なんでみんなこれ解けてるんだよ。個人的に好きだったのはCでしたが、まあ誰も解けてないので無理ですよね。とはいえ想定難易度がEよりも低いHやJもほとんど通されなかったことを考えると順位表を信用すぎるのも良くないなという感じでした。特に幾何、みんな避け過ぎですよね。僕も幾何をやると意気込んでいたのに問題を見すら見ませんでした。ごめんなさい…

我々は負けたとわかっていたのでYes/Noは悲しい時間でしたが、Time Manipulatorsとtonosamaの人外バトルに会場全体が大盛りあがりとなりました。圧倒されました。

解散後は企業ブースに移動しました。これから同人誌即売会に行くというのにKLab様から一足先に技術同人誌をいただきました。ありがとうございます。

競プロerとのコミュニケーションを求めている割にコミュニケーション能力も競プロ力も足りない自分は多くの競プロerとの共通趣味である音楽ゲームでのコミュニケーションを図りました。予想通り物理好き氏がゲームセンターに行くメンバーを募集していたため、早速乗りました。沢山の人が来そうだったので大人数が来ても耐えられそうな場所を探すと、ラウンドワン 横浜駅西口店があったのでそこに移動しました。

とりあえずCHUNITHMに参加したのですが、周りが強すぎました。

虹ポゼ4人がゲーセンに集まってるところなんて見たことないんだけど。

そんなこんなで初心者なりに何人かと遊びました。あまり時間がなかったのでほとんどの人とコミュニケーションが取れませんでしが、楽しかったです。

僕はこのあとコミックマーケットに参戦するので適当に退散して東京に移動しました。

振り返り

久しぶりのオンサイトで、有意義な大会となりました。 最上位には今からどうやっても追いつけないことを実感させられましたが、それでも自分の限界まではまだまだ精進が足りないとも思ったので、来年はより高順位に入れるように努力したいと思いました。あと3回出場し切るつもりでいるので今後とも宜しくお願いします。