クマーの競プロ精進日記

AtCoder赤とICPC World Final目指して頑張ります.競プロ自戦記、アルゴリズムなどについて

ICPC2023 Asia Yokohama Regional・Kite_kuma (チームSPJ) 視点

念願の Regional 初出場を果たしたものの,簡単な問題のバグが取れず撃沈した昨年度は本当に悔しくて,終了直後にちょっと半泣きになっていた気がする.

1 位なんて贅沢は言わないから,5 位くらいに入れたらいいな,できれば DELIAIR と Raspberry に引導を渡したいな,と今年は思っていた.

本番前

ほぼ初期状態の PC を用いる過酷な環境なので,エディタやその設定をどのようにするかの事前準備が非常に重要である.配布された iso ファイルを用いて本番とほぼ同じ仮想環境を再現し,どのような手順で構築を行うのがよいかを確認していた*1

本番 1 週間前などは実際に大学に集まって開始直後の手順の確認を行っていた.仮想環境は動作がかなり重いので,初期状態に近い私の学科 PC で似た環境を再現して練習に用いていた.

Day 1

この日はリハーサルだけである.nok0 が駒場祭 (東大の学園祭の 1 つ) のシフトで大幅に遅刻する*2ということだったので,zkou と私の 2 人での参加だった.翌日の twitter で知ってびっくりしたのだがこんな感じだったらしい*3

練習コンテスト開始.B がインタラクティブで,初めて用いるテストランナーに戸惑うも,clar に書いてある通りにコマンドを打つと help が表示されたので何とかなった.これ便利すぎるからこの世の全インタラクティブ問につけて欲しいんですけど.

一通り AC した後,サンプルの入出力をどうするか zkou と相談した.これまでは問題の PDF ファイルから手作業でコピペ (あるいは手打ち) をしていたのだが,問題 C のようにサンプルが多い場合にかなり面倒だった. そこで新たにダウンロードしたサンプルの zip を unzip するコマンドをテンプレートに追加した.コマンドを工夫することで思ったより手短に処理が書けたのは発見だった.

そんなこんなでリハーサルが終了した.後半はずっと暇にしていたのだが,DELIAIR は写経練習をしていたとあとから聞いてなるほどと思った.今思うとインタラクティブの扱い方をメモしておいてもよかった.なおこのリハーサルでも印刷ができるので,翌日の本番に向けて新たにライブラリや資料を追加したくなったら適宜書いて印刷することで資料を増やすことができる.

nok0 は SPJ のチーム紹介タイムにも間に合わず,結局 zkou と 2 人で適当に喋ることに.いないことを利用して nok0 について適当なことを言ったら一部の人が半笑いだった.

nok0 が到着したのは Day 1 の終了間際だった.何しに来たん?などと煽った後は,リハーサルの感触は練習と概ね大差ないこと,bash スクリプトが一部変更になったことなどを伝えた.

恐らく全チームのなかで最も遅いであろう写真撮影をした*4.3 人で肩を組んで撮ってもらった.

明日の朝は早いので,中華街に行くこともなくすぐに帰った.

Day 2

朝 7 時 10 分.眠い.昨日布団に入った瞬間に寝付けないことを察してからというもの,合計で 5 時間も寝られていない.家が横浜から若干遠いのでもうすぐ出ないといけない.来年はホテルに泊まろう,と思いつつ家を出た.

8:40 ごろには無事コーチも含めて全員が集合でき,非常にスムーズに入場できた.もってきた資料を広げて準備をする.

クリアファイルの類を使えるか確認したところ NG だったのでええっとなる.なんとか書籍に挟むなどしてライブラリの紙を立たせようとしたものの,紙を立たせることそのものに注意が入ったのでやめた*5

開始直前には戦略について最後の確認をした.ペナルティが重いので慎重に進むこと,zkou ができるだけ多くの問題に目を通すこと,昨日唯一インタラクティブチェッカーに触った私がインタラクティブを実装することなど.

コンテスト中

キーボードのミスタイプが続き少し萎えつつも慎重にセットアップを完了する.nok0 が A を通す.その間に私は zkou から B の解法を聞き,それは嘘だったものの,すぐに別の線形解が思いついたので通す.なんとこれが FA だった.

通されている F の概要を nok0 から聞き,2 分くらいですぐ解法が浮かんだので書いて提出し,AC.続いて D を読む.反復回数が高々 9 であることを指摘してもらって無事 AC.復元が必要であることを忘れていたせいで修正にやや手間取った.ここまで 50 分くらいで,速度はまあまあだと思う.

nok0 と zkou が E を詰めている間に私は適当に後ろの方を読んでいた.K が解けそうだが,インタラクティブでめんどくさそう.H はまあなんとかなるかも.I は難しいのか簡単なのか良く分からない.G は数え上げらしいので自分が見てもどうせ意味はないだろう.

E で 1 ペナが出て,少し炎上気味になっている.nok0 が定数倍高速化をして,これで通らなかったら一旦諦める,と言って投げたら通ってほっと一安心した.

私は K の解法を考えていた.およそ 500 本の直線で大まかな x 座標を特定できるが,その後は…?と思っていたところ,孤の長さの 2 乗は制約から必ず整数になることに気付く.さらに zkou が,「1 つ隣の直線との共通部分の長さも見たら分かるんじゃ?」と言ったことで全てが解決した.二分探索をする方針に引っ張られすぎていて単純な方法を見落としてしまっていた.

K を書き始めたが,nok0 も G が解けたようなので,お互いに実装に詰まったら相手に PC を代わるような感じでやった.ほどなくして 2 つとも通った.

まだ 2 時間しか経っていないが,既に 7 完していて,もう残りが 4 問しかない.Speed Star の圧倒的速度を横目に,希望のある問題を探す.3 人で相談して,なんとなくフローっぽい H を nok0 に,閃きゲーっぽい I を zkou に,そして凸っぽい最適化の J を私に回したのが結果的にも非常に好判断だった.

10 分ほど経ったころ,zkou 先生がその天才性を遺憾なく発揮し始める.

"必要十分条件ってこれじゃない?"

............はい,そうです.何も根拠は出せませんが,あなたが全部正しいです.zkou が提示したのその条件は,私の頭にある I 問題のイメージと,何もかもがぴったりかみ合っていて,もうこれ以上証明などを考える気が起きなかった.魔法を見ているような,浮ついた気分で書き始める.ちょっとだけ実装がめんどくさいことに気付く.浮動小数点数を使うのはおそらくジャッジも全力で落としに来ているだろう.実際に hack ケースが作れそうなことも確認した.これを整数だけで処理するには…制約が小さいから愚直にやればいいのか.書く.FA.zkou 神すぎ.これだからチーム戦はやめらんねんだよな.

nok0 と zkou が H を詰めている間,私は J を考える.惜しいところまでは行くのだが,あと少しのところで計算量が落ちない.nok0 は H の方針が詰まったようなので,フローの最悪計算量には目をつぶりつつ実装する.それを提出すると…AC.なんと 2 位になっていた.しかし 1 位ははるか彼方の先にいる.それが東大のチームという現実を突きつけられ,絶望しながらも,わずかな全完逆転の可能性に賭けて私が J,nok0 が C を考察する.zkou は 2 人の考察の間を行き来していた.

私はやっぱり最後の最後で計算量が落ちずに完全に行き詰まっていた.nok0 が FPS の inverse を欲しがったので気分転換がてら実装したりしていた.

nok0 が懸命に C を実装するも,サンプルが合わない.J も全く埒が明かず,残り 10 分ほどで nok0 のコーディングを見守るだけになった.最後までサンプルが合わず終了.後で聞いたら微妙に考察に漏れがあったようだ.

結果発表

Yes/No の時間.結局我々は凍結後に提出していないので,3 位からどれだけ耐えてくれるかの勝負になった.kotamanegi_marunage とラズキャンに抜かれて 5 位で終了.ひとまず目標を達成し,去年の借りは返せたが,ラズキャンには結局敵わなかった.

表彰台で企業賞を渡され,写真を撮られた.そこから自分の席に戻る際には,安堵,感慨,疲労感,達成感,そして幸福感が入り混じった複雑な感情を覚えた.

終了後

料理がいっぱいあってすごかった. 交流が下手なので顔見知りばかりと喋った気がする.企業賞を頂いた MCD 様のブースに行くなどした.

会場を出た後は tokusakurai さん,torisasami さん,tabr さんと SPJ の 3 人の計 6 人でカフェに入ってだべっていた.適当な時間に切り上げて帰った.


Speed Star が優勝したことにより,チーム SPJ の今年の ICPC はこれで終了である.私は早生まれではないのでこのメンバーで出られるのはあと 1 回になった.

そして今年は DELIAIR と The Raspberry Candies の方々にとって最後の年でもある.東大に限らなくとも,現在の日本の ICPC チームで,全員が AtCoder で 2400 以上のチームというのはさほど多くない.だからこそこの両チームは貴重なライバルであり,同じ大学の仲間でもあった.

両チームの方々は全員が競プロに対して熱心で,東京周辺でオンサイトがあればほぼ必ず来ていたし,UCup にもほとんど毎週参加している印象がある. 競プロのイベントがあるたびに話すような人たちで,今思うとそれが自分やチームにとっても非常に刺激になっていたのだろうと思う. また全員が同学年であることもあり,お互いがお互いをバチバチに煽り合ったりするのも見ていてめちゃくちゃ面白かった.うちのチームも仲が良いが,それとはまた違う仲の良さだなあと思っている.

この 2 チームの方々の引退は本当に寂しい限りだ.人見知りなのでもうこれからオンサイトで誰と話せばよいのか分からなくなりそうだ.心配しなくてもあと 1 年で我々も引退なのだけれど.

今年で終わりの方々は本当にお疲れ様でした.またどこかで会って,競プロの話でもしましょう.

というか SPJ の ICPC ももうあと 1 回だけなのだなあ.有望な B1 のチーム,などと言ってもらったりしていたのがついこの間のように思い出せるのに.来年も同じメンバーで出るので,同一の 3 人で 5 年連続出場という珍しい記録になるはずだ.

粒揃いだった東大の 1 年上の代が引退したことで,来年は WF 狙えるんじゃないかと言われることもあるが,チームの力がそこまであるわけでもないので,正直他の強い人たちの意向次第だと思う.さすがに国内予選突破くらいは許してほしいけどね.下からの突き上げもあるけど,黄 x3 くらいのチームにはまだ負けたくない.橙 x3 くらいのチームができたら良いライバルになって良いなと思う.赤の人は出ないで本でも書いておいてください.

最後に,今年も ICPC を開催していただきありがとうございました.来年も行けるところまでやるんでよろしくお願いします.

*1:詳細な戦略については引退後に明かそうかなと思う

*2:運営には事前に伝えてあった

*3:こいつ ICPC 舐めてやがる

*4:これのために運営の方に何度も nok0 の到着時間について尋ねられていた.申し訳ない

*5:他のチームに見えうるから,という理由だったと思う