torii + karinohito + Dispersion の 3 人で suzukaze_Aobayama として出場.12 位.

チームについて
suzukaze_Aobayama は今年で 4 年目.3 年前は mugen + sotanishy + karinohito,去年と一昨年は sotanishy + karinohito + milkcoffee だった.今年は karinohito 君以外の 2 人がいなくなってしまったので僕と Dispersion さんが加わった.
各メンバーのレート(Highest) は橙・橙・黄で,割とバランスがいいチームだと思っている.特に僕と karinohito 君はお互いの苦手な部分を補い合っていて,隙があまりない.毎週末に大学の図書館で 3 人で集まって 5h コンを走っているが,練習では失敗したことがなく,日本の他大学のICPC強豪チームに勝つことも少なくなかった.
模擬国内まで
チームが確定したのが 4 月下旬で,そこから可能な限り毎週末に集まって UC や Gym を走った.国内予選はまあ突破できるだろうと思っていたので,Regional やその先を見据えた練習をしていた.模擬国内までに 3 人でのチーム練は 8 回行っていて,どの回も冷えたことがなかった.解くべき問題をうまく分担できていたし,チーム戦のムーブが失敗することもなかった.一度も失敗を経験しないのが逆に怖くて,本番前に失敗したときのムーブとか雰囲気を経験しておきたかったので,練習のときに「失敗しないかな~~」とか言ってた(これがフラグ回収になってしまった...).ほかには AOJ-ICPC の 国内予選/模擬国内 埋めを 3 人でやり,進捗状況を共有(監視)し合った.
模擬国内
3 位.この日も順調だった.軽く感想を書いておく.
初動について.A 問題は僕が担当.B 問題の問題文が短いなら僕に投げてもらうことにしていて,その判断を僕が A 問題を解いている間に k と d に任せる.C 問題は k と d.D 以降はその時に応じてという感じ.
というわけで A 問題を解く.
A問題 AC(00:02:10)
k と d に B 問題の実装を任せられたのでやる.微妙に実装をバグらせて時間がかかってしまった.
B問題 AC(00:10:39)
B 問題を僕が書いている間に二人が C 問題の考察が終わっていたので実装を d に渡す.実装方針について軽く助言をした.
C問題 AC(00:27:06)
先に D 問題にまで目を通していた k から問題概要を教えてもらう.このときに誤読をしていたみたいで,状態数が分割数になってしまう DP になってしまい,コードは書けたものの実行時間が遅く,しかもサンプルが合わない.ようやく誤読に気づき,正確な問題文を理解したら解法がすぐに降ってきたのでコードを書き直す.
D問題 AC(00:47:31)
k と d が E 問題の考察を終わらせていたので k に実装を渡す.そのうちに F 問題を読むと,これもあまり時間がかからずに解法が降ってくる.d を呼んで僕の解法の正当性を二人でチェックし,実装方針もある程度固める.そうこうしているうちに,k が E 問題の実装がある程度終わらせたがサンプルが合わないらしい.コードを discord にペーストして,実装をもらう.F 問題はバグらせることなくすぐに AC.
F 問題 AC(01:06:10)
E 問題のバグが見つかったらしいので E 問題に実装を戻す.無事 AC.
E 問題 AC(01:12:22)
全員で G 問題を考える.最初は CHT 方針を思いつたが,上位 K 個の最小値を持つ方法は知らないのでいったん別の方針を考える.お絵描きをしていると想定解の遷移を priority queue で管理する方法を思いついたので僕が実装する.愚直解もちゃんと書いて落ちないことを確認.
G 問題 AC(01:43:38)
この時点で 1 位.かなり順調

その後は H 問題を全員で考えていたが 1 時間かけても何も解法が思い浮かばず終了.結果は 3 位.
感想
手ごたえとしてはいい感じ.ちゃんと分担できていたし,大きく詰まることもなかった.特に上振れを引いたという自覚はなくて,ちゃんと練習した成果が出せたかなという感触.ひとまず安心.
国内予選
14 時に研究室にサークルメンバーと集合して席決めをした.東北大では AtCoder じゃんけんで勝った順に席順を決めていくという慣例がある.今年は1チームだけ個室のvipルームを用意されていた.じゃんけんに勝ったのでこの部屋を選択.
— とりゐ(競プロ) (@torii_kyopro) 2024年7月5日
そのあとはプリンターのチェックをして,時間をつぶしていた.毎年リハーサルから本番までの時間が長すぎるといっている気がする.その間に緊張して研究室のトイレにお世話になるというのも恒例になっていた.ヌルっとコンテストが始まった.
初動は基本的に模擬と同じ.僕が A 問題を読んで書く.昨年は python の強みを生かして FA 賞を狙いに行ったが,今年は事前準備が許されていて強みが活かせないので,冒険はしなかった.
A問題 AC(00:02:00)
B 問題の実装も頼まれたので引き続き実装.k にうまい実装方針を教えてもらったので言われたとおりに実装.
B問題 AC(00:05:49)
C 問題の実装を k,d に渡して,D 問題を読む.問題自体は簡単だが,実装方針を誤るとめんどくさくなりそうな問題.k を呼び寄せて実装方針について軽く相談.私はダブリングを提案して,k はループのサイズで割る方針を提案.k の方針の方がバグりにくいと判断したので後者の方針を取る.そのころには C 問題も解かれていた.
C問題 AC(00:09:09)
D 問題の実装をやる.途中で実装がミスりそうだなと判断したので,k を呼んでにコーディングを監視してもらう.実装で結構沼った気はするが無事 AC.
D問題 AC(00:36:28)
この時点で 8 位.模擬国内よりは低いが悪くはない.ここからが地獄だった.
僕が D 問題を解いている間に E 問題の解法が出来上がっていたらしい.解法は解説と違って,再帰的に貪欲に決めていくという方針で,結果的にはハズレ方針だった.実装を d に任せることにしたが実装がやばくなりそうな気がすると本人は言っていた.ほかに実装キューがたまってるわけでもないし,順位も悪くないのでそのまま任せた.
F 問題を僕と k で読む.コインから 4 方向を逆にたどればいいと k が提案してくれてよさそうな方針だねと言う.僕は壁を折り返してボールの挙動を直線として扱う方針を提案したが,k は愚直にシミュレートする方針を提案.後者の方針を取り二人で細部を詰めた.実装が結構大変な気がしたが,k なら大丈夫だと思って k にお願いする.k は引き続き F の実装方針を詰めている間に僕が d に E 問題の実装を覗きに行くと,実装が爆発していそうだった.E は一応実装しきったものの,サンプルが一向に合わない.このあたりから焦りが出てくる.
E 問題の実装を続けているのはよくないと判断し,強制的に実装を F 問題に移す.F 問題も実装が爆発しやすい系の問題ではあったのでこの判断はかなり怖かったが,k の実装力を信じるしかなかった.僕と d は E 問題のコードを印刷してデバッグ個所を確認しようとしたが,コード量が多く焦りもあって全然頭に入ってこない.いくつか間違えている箇所を発見し,その都度いったん実装を F 問題からもらうが,それでも一向に合わない.ますます焦りが募のる.
ここで,E 問題の別の実装方針が思いついていた(解法は同じ)ので,思い切って今まで書いたコードを白紙にしてそっちの方針をとることにした.d に僕の実装方針について説明して間違いがないことを確認.F 問題の実装を優先し,それが終わってから僕が E 問題の実装を担当することにした.
E, F 問題でできることがなくなったので G 問題を考察する.全部偶数 -> 奇数 * たくさん + 偶数 * 1 -> 全部奇数 の順番に考察して,あっという間に解けてしまった.EFG の中でこれが一番簡単じゃん!かなりの確信度があった.実装も E, F に比べると部分和問題を解くだけなのでだいぶ軽い.余裕が少し出てきた.
ちょうどそのころ F 問題の実装が終わったらしいが案の定バグがあるらしい.G 問題を 15 分くらいで確実に通せる自信があったので,F 問題を印刷して G 問題の実装をもらう.d に実装を監視してもらいながらコードを書きあげた.バグもなく提出すると AC.
G問題 AC (02:20:49)
D 問題 AC から 100 分.本当に苦しかったしめちゃくちゃ焦った.順位表を見るとこの時点で東北大 1 位.安堵.
k が F 問題のバグの個所を見つけたので修正してサンプルがあったので提出するが WA.再び F 問題を印刷して,今度は E 問題の実装をもらう.実装方針はほぼ決まっていて,怪しいところは紙コーディングもしておいたので順調に進む.そのうち F 問題のバグを見つけたらしいので再び F に実装を戻して再提出.無事 AC.
F問題 AC (02:42:02)
これで予選突破がほぼ確信になり,だいぶ心の余裕ができる.残り時間はわずか.E 問題が残っているのでこれを終わらせることに専念する. 実装が終わり,サンプルや手で作ったテストケースがあったので提出するが WA.修正箇所を見つけたので書き換えて再提出するがまたもや WA.原因がわからないのでとりあえず解が valid かどうかを assert を付けてチェックすると落ちた.印刷して目視で確認していた k が決定的なミスを見つけてくれたので修正すると assert で落ちない.3 度目の提出でようやく AC.
E問題 AC(02:56:04)
残りは 4 分でもうできることはない.後半良く挽回したねと讃えあって振り返ってるうちにコンテスト終了.
感想
中盤はかなりひやひやした.結果的には 7 完 12 位で悪くはないがいろいろ反省が残った.初めて冷えるコンテストが本番だったのマジで困る.やめてくれ~~~.初めての冷えでたくさん反省点が見つかったので,Yokohama までに克服せねば.
potate さんの実況で suzukaze の挽回に言及されていて,中盤死んだ状態から 3 問とも通したのは偉いと言っていた.自分でもそう思う.終盤はチーム練の成果が出ていたと思う.
今後
国内予選は相性が悪かっただけで 5h になると安定していると思っているので,Yokohama ではこれよりいい順位取りたいなー.