ICPC 2025 国内予選に参加しました。
チーム構成
- Oxojo (AtCoder: Oxojo)
- ZOI (AtCoder: ZOIZOI)
- jupiter (AtCoder: jupiter_68)
24B の中で 1・2 レベルに強い 2 人が来てくれました。
チーム名は Tsukuyom1 です。なんとなく日本っぽさがあるいい感じの名前を ChatGPT に考えてもらった 探した結果こうなりました。最後を 1 にした理由は、なんとなく見た目のバランスが良いかなと思ったからです。小文字の i でもあんま変わんないと思います。
練習
traP で行われる ICPC 練習会に参加したり、自分たちでセット練習をしたりしました。
個人的には初動がとにかく重要だと思っていたため、私が A、ZOI が B、jupiter が C を見たり、ZOI と jupiter を逆にしたり、ZOI に A を見てもらったり、jupiter に A を見てもらったりと、様々なムーブを試しました。この大学は自分たちよりレートが高い人が非常に多く、経験値がある人も多かったので、とにかく自分たちにとって最適な戦略で勝負することは必須だなと思っていました。
模擬国内
国内予選に先立ち、模擬国内に参加しました。
内容
初動は Oxojo が A と B を書いて、ZOI と jupiter が C と D を分担して見ることに。
A を見て、適当に mex を求めればいいので書いて通す。(00:01)
B に移って、ちょっとめんどくさそうな見た目をしていたが、頭から順にシミュレーションしていけばいいので、それを書いて通す。(00:05)
jupiter が C の解法を思いついていたので jupiter に C を書いてもらい、E を見る。構文解析なので、これは俺が解く問題だなと思って読む。ちょっとめんどくさそうな感じだったが、丁寧に実験すると、構文解析が本質パートなことに気づいて丁寧に構文解析を考え始める。
考えている間に C が通る。(00:18) D はインタラクティブだったが ZOI が書けるとのことだったので ZOI に交代。jupiter には F を見てもらう。「E もうちょっとで解けそうだから D 1 回提出したら変わって~」と言って実装席を予約しておいた。
そのあと 1 発で D が通った (00:36) ので、席を交代する。とりあえず 2 人で F を考えてもらった。その間に E を書いて、紆余曲折あったがなんとかサンプルが合ったので提出するも WA。よく見ると、同じ変数が複数登場する場合を考慮していなかったことが分かって書き直すも通らない。F が思いついていそうだったので jupiter に席を変わってもらい、ZOI と 2 人で印刷した E のコードを見てデバッグする。問題文をよく読み直すと、expression が number のみの場合を含むことを完全に忘れていたため、ちょっとだけ実装の席を借りて手直しし、なんとか通した (1:41)。ただ 3 ペナなのでかなり痛くて、この後を通さないと上位は厳しいという状況に。
順位表を見ると、F と H が良く通っているので、jupiter に引き続き F を書いてもらい、ZOI と 2 人で H を考えることに。実験をしまくると、とりあえず c = 2 の時は確実に ok なのは自明にわかった。同様に実験し、c = 3 の時は行ける場合があって、c = 4 の場合は確実にダメで、... みたいに実験していたが法則性が分からなかった。
一方で F も詰まっていて、コードを見るとメモリ使い過ぎ罪で怒られていたので、なんとか配列を小さくするように考えたり、H の規則性を頑張って見つけようとしたりしていたが、結局いずれもうまく進まず 3 時間が経過。
結果
ICPC 模擬国内 2025
— Oxojo (@Oxojo_) June 28, 2025
5 完 (abcde) + 3 ペナ、全体 41 位・学内 7 位
厳しい :sob: あと 1 週間頑張ります。 pic.twitter.com/rauafQ6K6P
5 完 215 分で全体 41 位・学内 7 位でした。ここからあと 1 週間でしっかり捲りたいところですね。
所感
模擬国内の結果を受け、やはり上位に入るにはノーペナで通すことは必要だと強く感じたので、とにかくペナを発生させないことを第一にやろうということにしました。1 回ペナ出してから 30 分考えて直すよりも、初めから 30 分考えてから通した方がいいし、20 分のペナというのはめっちゃ痛いので...
もう一つ痛感したことは、上位レート帯の競プロ er が多くいるこの大学では、早解きではほとんど太刀打ちできないということです。順位表を見てもわかる通り、いくら序盤の簡単な問題を早く通せたとして、HAOU KAYAMA や zer0shiki のような上位チームのメンバーは難しい問題もより速く解いていくので、同じ完数では全く歯が立ちません。私たちがこの熾烈な競争を勝ち抜くためには、とにかく確実により多くの問題を解くことが必要ということです。
国内予選まで
国内予選まで 1 週間もなく、仕上げていく時期なので、序盤のムーブは固定させ、とにかく安定性を向上させるように練習をたくさん積みました。構文解析や幾何といった重実装の問題を担当していた私は、とにかく実装を速く正確に行うことに加え、独特な問題が多いのでそのような問題をしっかり考察できるよう、分野を絞って重点的に訓練していました。
また、直前の練習などで見つかったライブラリの不備なども、強いチームのライブラリを参考に当日までに修正しました。特に幾何はライブラリがバグっているとデバッグで余計に脳を破壊されるので慎重に verify などを行いました。
国内予選
とにかく寝坊しないことが重要なので、全員でお互いに絶対に寝坊をしないぞと意気込み、無事全員が起床に成功しました。
内容
初動は Oxojo が A と B を書き、ZOI と jupiter で分担して C 以降を見るという形。
A を見て図を見た瞬間に書き始め、通す。(00:01)
B を見て、ちょっと実装に詰まるもなんとか一発で通す。(00:02)
この間に jupiter が C を思いついていたので、jupiter に実装を渡す。全体を見て、G が幾何なのと、全体的にグラフが多めかもという話になる。これを話している間に C が通る。(00:12)
ZOI に D の実装を渡して、jupiter に E と F の問題を説明し、私が E を、jupiter が F を考えることに。jupiter が F の解法を思いついたので、D で WA が出たタイミングで実装を交代。
ZOI の D のプログラムを印刷してデバッグを 2 人でする。バグが見つかったところで、F がなんと通る。(00:46) その後、バグを直して D も通る。(00:48)
E の問題説明をして、とりあえずここまでは思いついてますと話して、ZOI に残りを任せる。jupiter に G - I を説明する。G は幾何で私の担当なので私が考えて、jupiter に H を考えてもらう。E が分かったというので ZOI に E を実装してもらうが、私が始点を任意に選んでいいと誤読していたことが判明した。運よく、すべての頂点を始点と仮定して試す方針で書いていたので直す箇所が少なく済んだ。サンプルをなんとか合わせ、無事通る。(01:21)
その間に H がまあまあ通されていたので、jupiter と 2 人で H を考える。H の解法が思いついたらしく、何となく解法を聞いて正しそうだなと思いながら、実装を考えてもらい、ZOI が通したタイミングで交代。ただバグったりして 2 ペナを出してしまう。
ZOI が E の実装を終わらせたタイミングで、一応 G の幾何を説明して、I も説明して I を考えてもらうことにする。G の上界は自明に n + m + 2 ですよね、みたいな話をして、下界はこうやると構築出来て... といったところで、ZOI がちょっと G やりたいですと言って奪う。すると天才を思いついたらしく G が解けたというので G を実装してもらう。すると、なんだかんだで G がうまく一発で通ってくれた。(02:00)
その後は私が I を、ZOI と jupiter の 2 人で H を考える方針に。H は正しいという答えは見つかっていたものの、謎に 2 ペナを出してしまっていたところだったので、2 人で不備を見つけてもらう。なんとか穴は見つかったものの残り 30 分くらいで、ACORN を超えないと横浜には進めない状況。ペナ数が一緒で ACORN がこの時点で 8 完だったため、ここから ACORN を超えるには I を解くしかないですと状況説明をし、I に完全にシフトする方向に指示をする。3 人で I を考察するが、うまく転倒数をいじってやるんですかねみたいなことを考えているうちにコンテストが終わった。
結果
7 完・335 分で、全体 19 位・学内 6 位でした。残念ですが国内予選敗退となってしまいました。
所感
今回の自分たちは、今まで以上にパフォーマンスが良く、終始「行ける、行けるぞ!」と明るい雰囲気で臨めたと思っています。実際 7 完の中では最速なので、スピード自体には全く問題がなかったと思っています。ただ、今年のセットは 12 チームが全完するという非常に稀なセットで、特に科学大から横浜への進出枠を勝ち取るには全完が必須であるという非常に厳しい戦いとなっていました。最後自分たちはまだペナを出していない I を合わせに行く方向にシフトしましたが、結局 8 完だったとしても予選を通過できていないので、今回は完敗としか言えないです。
ただ一方で、私たちの実力 (もしくは実力以上の結果だったかもしれませんが) でここまで食らいついて行けるんだ、ということは今後への自信につながると考えています。実際、見事に予選を通過された先輩方からも、7 完が速くて本当にびっくりしたとか、序盤から中盤にかけて本当に調子がよかったなどという評価もいただいて、自分たちの中でもかなりベストを尽くしたなと思います。
最後に
今年も残念な結果に終わってしまいましたが、来年こそは横浜に行けると信じてまた 1 年頑張りたいと思います。
来年もよろしくお願いします。
もしかしたら他のチームメイトの視点もブログで出るかもしれないので、もし出たら読んでみてください。