ICPC 国内予選 2022 参加記(Bu-Bu-Du-Ke)

suisen・otera・kenchoの3人でチーム「Bu-Bu-Du-Ke」として参加し、全体12位・学内3位の成績で国内予選を通過しました。自分とoteraさんにとっては最終年だったので、何とか突破出来て嬉しいです。

予選前

Heno Worldの権利が無ければ突破は基本的に出来るんじゃないか、みたいなことを考えていました。が、まだ権利があったらしく、KUB1ppのことも考えると全体20位は必須かな〜という話をしていました。

予選本番

A:suisen、B:otera、C:kenchoの割り当てで開始。Aは簡単だったので丁寧に丁寧に出力ファイルを確認して提出してAC。Dに取り掛かる。

oteraさんのBの読解が大変そうで、Cを通したkenchoさんとoteraさんの2人で問題の理解を擦り合わせていた。

その間自分はDの考察をしていて、queueの先頭であることが確定している集合 S を持ってmin SとT[i] の大小関係によって決められそうなことが分かった。実装するもサンプルが合わず、デバッグ開始。バグを見つけて1ケース合うたびに他が壊れる、みたいなことを繰り返して辛くなっていたら、oteraさんから「Dまだあんまり通ってないですよ」みたいなことを聞いて安心。最終的に、min S=T[i]の場合、今までpopした値の最大値Mに対してM>T[i]ならT[i]から始まるqueueを作ってはいけないというケースが漏れていることに気付いて修正、S[i]とT[i]を書き間違えるバグで時間を溶かしつつも何とかAC。デバッグをしてる間にoteraさんがBを通して、kenchoさんとEを考えていた。4完の速度が結構速く、蓋を開けてみるとこの時点で予選通過が確定していた。

Eを2人に任せて、構文解析の練習をしていた自分がFに取り掛かっていた。「位置iから始まる部分で、左からl文字、右からr文字消す場合の辞書順最小」を求める再帰を書こうとする。構文解析パートは練習の成果もあり5分足らずで書けたが、l,rの管理でめちゃくちゃバグらせてサンプルすら合わない。

自分がバグと格闘していると、oteraさんからEは無限場合分けをすれば通せるということを聞く。kenchoさんは場合分けを網羅できるように色んなテストケースを作ったり、oteraさんのコードのデバッグを手伝ったりしていた。oteraさんは200行の実装を書ききり、2ペナしつつも何とかEが通る。kenchoさんの用意したテストケースがかなり役に立っていたっぽい。感謝…

Eが通るまでの間、oriKoU3も4完でEへの提出がありかなり怖かった。4完時点のペナルティはうちの方が小さく、oriKoU3もEで2つペナを出していたので、うちがEを通した時点でoriKoU3がEを通しても順位が逆転しないことが確定。これは通ったんじゃないかという話をしていたが、今考えるとF以降を通されると逆転する可能性は残っていたはず。

Eが通るまでの間、自分はというと、oteraさんが全部手打ちで場合分けを書いているのを応援しながら、ずっとデバッグしていて辛くなっていた。Fは出力の長さすら合っておらず、バグの原因が判明しないままコンテスト終了。

Fが通せなかったのは個人的に悔いが残る部分だが、予選通過の方が大事なのでok。

予選後

軽くコンテストの振り返りをした。最後僅かな時間でkenchoさんが考えていたGが正しかったらしい。結果論だけど、Fは放棄した方が良かったかなと思ったりした。

振り返りの後は近くの店でご飯を食べた。trineutronさんに遭遇し、話をした。

感想

とにかく予選突破できて嬉しい。横浜でも頑張ります。その頃には橙×3のチームになってたらいいな。