こんにちは。こめだわらと申します。
ICPC 2026 国内予選に、チーム Chronus で参加しました。結果は 9位 (学内2位) で、無事国内予選突破となりました。
チームメンバー
- Rice_tawara459 : 私。現在M1(26M)。ICPCは3年目で、今年がラストイヤー。現在のAtCoderアルゴレートはチームで一番高い。
- rhoo (jibjib) : 現在B2(25B)。ヒュがバカ強い(現時点世界7位)。AWTF(H) にも出場するらしい。
- caz37OwO : 現在B2(25B)。競プロ歴1年足らずで黄色になっていてすごい。
チーム結成
4月くらいには、知り合いの暖色たちは既にほとんどチームを組んでいました。残っていそうな中から強そうな人を探すとrhooくんがおり、rhooくんを誘いました。残りの1人をrhooくんに相談すると、cazくんが残っていそうと言われたので、誘いました。結果的に、かなり強いチームが誕生しました。
コンテスト前
昼はある程度早めに集合したつもりでしたが、tier S の席(一番後ろの窓側)は既に取られていました。しかたなく、一番後ろのドア側の席に陣取ることにします。
環境が最強であるrhooくんのPCを演習室のモニターに接続し、演習室キーボードを拝借してセットアップをしました。
リハーサルもしました。MLの確認、実行速度の確認などを行いました。軽い配列外参照程度ではREではなくWAが出ることを確認しました。
コンテスト本番
最初の実装はrhooくんです。画面を縦3分割し、左にA問題、右にB問題、中央にvscodeを置きます。
A問題
簡単そうだが、rhooくんは少し混乱していた。丁寧に場合分けしてAC。(0:03)
B問題
cazくん。私は全く見ていない。知らない間にAC。(0:04)
C問題
私の担当。左右からmaxを累積するだけ。のはずだが、なんか合わない。入力を睨むと、入力で与えられるものは深さだったのに対し、高さだと誤読をしていた。入力を100000-d みたいに強引に修正してAC。(0:09)
ちなみに気づいていなかったが、制約が なので累積すら必要ないらしい。
D問題
最初はrhooくんの担当。規則性が見えづらいらしい。少し不安だったので、私も一緒に見ることにする。図を書くとなんかいけそうだったので、残りはそのまま私が担当することに。紙の上で丁寧に場合分けをする。先にEが解けたらしいので、そっちを先に解く。
E問題
cazくんの担当。知らん間に爆速で通る。偉い。(0:26)
F問題
rhooくんの担当。Dを私が巻き取ったのでFに向かった。私がDを詰めている間に解けて、すぐ実装できると言われたので、そのまま実装を譲る。が、これは判断ミスで、後から分かることだがハズレ方針を引いていた上に、思った以上に細かい部分の実装が大変そうだった。一応書き上げるが、サンプルが合わずPCが回ってくる。
D問題(2)
私が担当している。場合分けが多いので、丁寧につぶしていく。1ケース くらいはかけていいので、少し楽をする。愚直を簡単に書けるので、書く。なんかサンプルが合わない。Fと交代しながら、バグを特定。普通に変数名を取り違えていた。サンプルが合ったので提出。AC。(1:04)
せっかく書いた愚直は結局全然使わなかった。
G問題
cazくんの担当。私とrhooくんがDとFをやっている間に詰めてくれていた。爆速で通す。偉すぎる。(1:18)
H問題
cazくんの担当。私とrhooくんがDとFをやっている間に詰めてくれていた2。爆速で通す。本当に偉すぎる。(1:35)
F問題(2)
サンプルが合ったので提出するが、TLE。よく見ると、O(QM^2) とかかかっていたので、それはそう。
D問題を通した後の私がサポートに入っていた。長方形の角(+始点と終点)を頂点とする 頂点のグラフでダイクストラをする方針。これだと、辺を張れるかの判定に かかるので、終点からの各辺の列挙にO(QM^2) かかってしまう。平面走査などをすることで、 に落とすことはできて通りそうだが、激ヤバ。しかし他に方針も思いつかないので、rhooくんが頑張って詰めることになった。
後で正解方針を聞くと、座標圧縮をして 頂点のグラフを作れば、もっと簡単になったらしい。全然思いつかなかった。何のためにサポートについたのやら。
F問題をrhooくんに託し、私はI問題へ向かう。こういう激ヤバ実装を通しきることに関してrhooくんはかなり強く、とても頼もしい。気合いでAC。(2:18+1)
I問題
私が担当をする。解の形が制限されるなどを考えたが、あまりよく分からない。考察を抱えたままトイレに行くと、「数列の増加分の総和=区間に1を加算して数列を構成する最小回数」みたいな話を思い出す。これをもとにすると、1を足すことで到達時間が最も短くなるような区間を選び、1を足す、という貪欲法が考えられる。これは実際正当そうだったので、到達時間の減少量の下限を決め打つ二分探索による解法が経つ。整理して、実装できそうと思ったところで、Fが通る。PCをもらい、実装する。
実はここまで全然順位表を見ていなかった。Fを通した時点で9位だったはず。10位以内での進出を確定させたいので、ここは何が何でも通したいところ。
ある程度実装は詰めていたので、そこまで苦労することなく書き上げたつもりだったが、サンプルが合わない。何ヵ所かヘマをしており、チームメイトに指摘してもらいながら直す。サンプルが合ったので提出。WA。
よく考えると、Fを使い切ることを仮定して実装していたので、全区間で速度上限が達成可能なパターンでバグっていることが発覚。その場合の処理を追加して再提出。またWA。
全然原因が分からず、ヤケクソ1提出をして、そのままコンテストが終了。無念。マジで通したかったので本当に悔しい。逆こめだわらさんありがとうになってしまった。
執筆時点で気づきましたが、一個処理をミスっている箇所に心当たりがあります。直したら通るかな…と思い、記憶をもとに書き上げ、公開されているテストケースを試したら、修正後のコードが通りました。マジで悔しい。
コンテスト終了
結局Fを通した後に逆転されることはなく、9位で終了しました。 Phantasm に次いで学内2位で予選突破です。マジでよかった。
cazくんが終始偉かった。rhooくんがFを通しきったのも偉い。私がIを通しきれば完璧だったのですが、残念でした。
おわりに
ひとまず最大の山場を突破できたので、安心しきっています。25Bの二人の活躍も素晴らしかったです。横浜でも彼らには期待しています。
科学大の残りの通過チームは、kokuuとzer0shikiです。おめでとうございます。sshはzer0shikiと1位差で、惜しかった。続くチームも、どこも通ってもおかしくないチームばかりで、本当に激戦でした。来年私が引退して以降も楽しみですね。
ここまで読んで下さり、ありがとうございました。