tardigradeの競プロ日記

マラソンコンテスト(プログラミング)について書きます

ICPC 2023 Asia Yokohama Regional 参加記

チームtatitsuとして、itigoさんpitsuさんICPC 2023 Asia Yokohama Regionalに参加しました。

自分は去年に引き続き2回目の横浜でした。また、itigoさんpitsuさんのラストイヤーでもありました。

11/23(木)

17時ごろに横浜に到着。金曜から行くか迷ったけど、早めに土地の雰囲気に慣れておきたい気持ちがあった。

宿

ある程度の広さのプライベートな空間が欲しかったので、自分は普通のビジホに泊まった。宿代だけで43000円くらいかかってお財布が痛かった(宿泊費+交通費は支給されるけど、流石に赤字)。

itigoさんとpitsuさんは、3泊8500円のカプセルホテルに宿泊。向こうに着いてから「目覚ましがかけられない!」という話になって、ちょっとビビった…。本番だれも寝坊しなくて良かった。

ごはん

この日は小籠包とコンビニでちょっとしたものを買って食べた。

11/24(金)

お昼前から、pitsuさんと一緒に中華街を回った。

小籠包、点心、ちまき、大鶏排、フルーツ飴など、主要なものは一通り食べたと思う(めっちゃ奢っていただいて感謝…!)。いろんな話ができてとても楽しかった。

結局5,6時間くらい歩いて17時過ぎにいったん解散、夜は北大OBの方々+北大現役勢(tatisu,elephant_spaghetti)でご飯を食べた。 JAGのこととかOBの方の近況とか、面白い話もたくさん聞けて楽しかった(ビザ間に合うといいですね…)。

11/25(土)

開会式&リハーサルの日。pitsuさんのお友達+tatisuでお昼ご飯を食べてから会場に向かった。

リハーサル

席は一番左の列の真ん中くらいで、去年とは逆サイド。前には東大のSPJがいて、夏合宿で同部屋だったzkouさんと少し話をした。

リハーサルでは、コンテスト本番で使うvscodiumの設定を確認したり、インタラクティブ問題のサンプルケースを手元で回せるやつ(去年はなかった)の確認をしたり、キーボードの叩き心地を確認したり(キーキャップが小さめで、僕は結構苦手だった)。

この日の夜は、高校の友達(ICPCのバイトで来てた)と中華街や山下公園まわりを散策した。

久しぶりに話ができて楽しかったし、適度に気持ちもほぐれてめっちゃいい時間だった。感謝!!!

その後はホテルに戻って23時くらいに就寝。

11/26(日)

7時起床。寝覚めはいい感じだったけど、しっかり朝ごはんを食べたのは失敗だったかも(眠気が…)。

会場入りは8:40からで、8:45くらいには入場(受付の人が、前日会ってた高校の友達でびっくり)。

荷物をまとめたり適当にだべっていたりしたらすぐに時間がきて、「緊張:ワクワク=3:7」くらいの心境でコンテスト開始。

コンテスト中

itigoさんがPCのセットアップ、pitsuさんがA、僕がBを読む。

itigoさんがPCを空けたあとすぐにpitsuさんが実装を始めた。安心感を覚えると同時にBが思ったよりわからず少し焦る。

序盤のタイムロスは痛いので、あまり一人で悩まずすぐにitigoさんに相談する。

  • この辺でpitsuさんがAをAC

二人で少し考えているとitigoさんが解法を語り始めたので、実装を引き受ける。途中、問題をめちゃめちゃ誤読していたことに気づいたりしながら実装を終えるも、サンプルが合わない。しっかり焦る。

Fが良い感じっぽかったので、コードを印刷してitigoさんにPCを明け渡す。

解法は正しい自信があったので、一生懸命コードを睨んでバグを探していたら入力を受け取っていないことに気づく。あーーーーーーーー。

  • ごめんなさいをしながらBをAC

ACを取ったことで頭が少し冷える。itigoさんがFを書いている間にpitsuさんと手分けをして解けそうな問題を探す。

まずJを読んだが何もわからない。何もわからないことを報告してKを読む。これは解けそう。

pitsuさんの方にはすぐに解けそう感じの問題はないらしく、一緒にKを考えることにする。

誤読防止のためにpitsuさんには前情報を入れずに問題文を読んでもらうことに(これは国内予選のときからやってた)。

pitsuさんが読解をしている間にそれっぽい解法が生える。回数が結構ギリギリなので、慎重に吟味しながらpitsuさんと解法を煮詰めるフェーズに入る。

  • 解法の正当性を確信して、ある程度の実装方針が固まった辺りでitigoさんがFをAC

すぐにPCを貰って実装を始める。怖いところがいくつかあって、pitsuさんにこまめに確認を取りながら実装した(itigoさんはこの間にDE辺りを読んでいたと思う)。

一通り実装を終えたと思ってチェッカーで確認したら、色々バグっててやばかった。チェッカー神。

  • なんやかんやでKをAC

itigoさんが「Dは実装が重いけど解ける」という話をしていて、pitsuさんが頑張ることに。自分はE、itigoさんはGH(?)を読む。

EはbitDPっぽさが凄くて、愚直にやると $O(N^{3} * 2^{N} )$ というところまではスムーズに考察が進む。「8secだけど $N \leq 24$ だし流石にですよね...?」とitigoさんに聞いてみたところ、枝刈りの案が返ってきたので突き進んでみることに。

Dの実装が終わり、WAがでたタイミングでPCを譲ってもらう。実装は軽かったが投げてみるとTLE。

ここからしばらくDのWA、EのTLEと戦う時間が続く。

Dはpitsuさんとitigoさんが印刷されたコードを読んでバグ探し、Eは自分がPCを貰って定数倍高速化を図っていた。

お互い何度か失敗するも、同じくらいのタイミングで、それぞれ気合でACを取る(Dは誤読してたらしい?)。

  • DをAC(2WA)

  • EをAC(3TLE)

順位表的に次に解けそうなのはG、次いでH。残り時間は1時間半くらい。

pitsuさん「Gは苦手枠。力になれそうにない」

itigoさん「HよりはGの方が簡単そう」

僕「どっちも頑張りたい」

ということで、pitsuさんがH、itigoさんがG、僕が両方の考察を行き来する感じになった。

そして椅子を温める…

そして椅子を温める…

そして椅子を温める…

コンテスト終了。

Gは「操作回数が少ないから何かを全部試せそう」、Hは「一人だけなら解ける」というところまでは考察が進んだ。

特に、Hはpitsuさんが2回くらい貪欲を投げていたがWA。

解説・結果発表

最終28位。去年より1個順位が上がった。

Kの想定解を聞いた感じ、query回数の制約が500ちょいしかなくても解けそうに思ったけど、そんなことはない?

Eの $O(N^{3} * 2^{N} )$ はやっぱり非想定だったね。

Gは可能枠だったのに拾えなかったなぁ…解説聞いても理解できていない部分があるから、aizuのjudgeに追加されたら取り組んでみる。

あとは、Speed Starは凄かった。

コンテスト後

20:40発の飛行機に乗るために早々に撤収。

飛行機が20分くらい遅れて、札幌までの終電逃しそうだった。危なかった。

感想

まずは悔しい。でも今できる最大限のパフォーマンスはできたようにも思う。自分に対して思うことは色々あるけど、これを最後の年までひきずらないように、これからやることをやっていく。

あとはやっぱり楽しかった。itigoさんとpitsuさんには入学したときからすごくお世話になってるし、そんな先輩方のラストイヤーに、同じチームで出場させてもらえてとても光栄でした。

来年のICPCに向けてまた精進します。