点Nの軌跡

競プロの話または日記

ICPC2023 Asia Yokohama Regional 参加記(pointN)

pointNです。

ICPC2023アジア横浜地区大会に筑波大学からBig O of N cubedとして参加したのでそのことを書きます。

チームについて

チームメイトはniuezさんとruthenさんです(以下敬称略)。参加時のAtCoderのレートは3人とも2000ぐらいでした。全員前の年までは別のチームで活動しており、チームを組むのは今年が初めてでした。チーム名は要するに \mathcal{O}({N}^{3}) であり、由来は3人のハンネの最長共通部分列がnだからです。pointNとruthenは年齢の制約上今年がラストイヤーでした。ちなみに筑波にはもっと強いGoodBye2023というチームがおり、つまりBig O of N cubedわれわれは二軍です。

データ構造やアルゴリズムに対する知識量が他より多く重実装にも強いniuezが実装の中心になり、それを感覚寄りのpointNと理論寄りのruthenがいい感じに支えたりそうでなかったりというスタイルのチームでした。

金曜日(前々日)

大会後に持ち越すとまずい宿題があったのでそれをやり、残りはそわそわしていました。チームメイトはライブラリを準備してくれていたりしました。この辺、任せっきりになってたのは申し訳ないと思っています。恥ずかしながら蟻本すら持っておらず、螺旋本ぐらいしかないのでまあそれは持って行くねーとだけ言いました。

土曜日(前日)

11時に秋葉原で集合ということになっていたので、頑張って起きてTXに乗りました。途中で競プロイベントで使えそうな名札を忘れたことに気づきましたが、もう遅いし、どうせ知り合いも少ないので気にしないことにしました。niuezは先に秋葉原に行ってゲーセン行ってたっぽいです。改札前に待機していると上半身オレンジでめちゃくちゃ目立つ顧問(YesNoおじさんとして知られるアランニャ・クラウス先生)が来たので合流、まもなくniuez、ruthenの順に到着しました。GoodByeの人たちは別行動するらしいので、4人で京浜東北線に乗って横浜に向かいました。

僕は横浜に行くのは初めてだったのですが、練習で解いた問題の話をしていると思ったよりすぐ目的地の関内に着きました。駅を出たところに野球場があり、しかもこの日はファンミーティングがあってユニフォームを着ている人が多かった(このせいでホテルが取りにくかったそうな)ので、道中は野球の話をしていました。とはいえ、チーム全員あまり野球に明るくなく、どの球団がセ・リーグパ・リーグなのか、DeNAベイスターズって同一の球団だっけ、などと、かなり程度の低い会話をしていました。広島出身のpointNはもうちょっとプロ野球に精通しているべきだと思うのですが。

野球場

そこから中華街でお昼を食べました。金香楼というお店で、壺料理を推しているお店でした。店内には水が流れていました。僕がAランチ(スペアリブ壺スープ)、ruthenとniuezがCランチ(牛バラ壺煮)、Y/NおじさんがDランチ(麻婆豆腐)を選択しました。らっきょうを食べたことない人(niuez)とか杏仁豆腐を食べたことない人(niuez)とかがいて、世界は広いなあと思いました。

Aランチ

集合時間までには余裕があったので中華街を歩いて産貿ホールに向かいました。ずっと産貿ホールのことを産ホールだと思っていたのは内緒です。お昼時で人が多く、それなりに荷物が多い自分は歩くのが大変でした。鳥の揚げたでかいやつがおいしそうでした。

産貿ホールに着いてすぐ受付が始まりました。英語なのでちょっとだけ異世界感がありました。自分たちのスペースは入口にかなり近い位置でした。机上にはリハーサルで使う触れてはいけない封筒、名札、Tシャツなどが置かれており、名札はつけて、Tシャツは着てねーというアナウンスがモニターに映っていました。Tシャツを着るのは日曜の本番だけだと思っていたので、パーカーの上から半袖Tシャツという、かなり奇抜なファッションになってしまいました。

リハーサルは4問で行われました。システムを使うのは初めてだったのですが、なんとなく理解できました。Dで伝達ミスがありniuezに違う問題を解かせてしまいました。ごめんなさい。すぐ修正してくれるので心強かったです。ちなみに、リハーサルに置かれていた問題は横浜が初めての自分は知らないものでしたが、niuezが正しいほうのDを実装しながらなんかこれ書いたことある、などと言っていました。Clar質問の練習~とか言って、中華街でおすすめの料理店を聞いたりしました。関係ないことを聞くのはやめたほうがいい気がします(ちなみにYaku-Shoronpoという答えが返ってきたのですが、終わってから検索してもいまいちわかりませんでした)。

その後はチーム紹介でした。順に壇上に上がって30秒で簡単に紹介していくものでしたが、マイクを通した英語は全然わからないし、チーム数多いし、知り合い全然いないしでほとんど記憶に残りませんでした。インパクトのあるスライドと簡単なフレーズを意識するのが大事そうです。右後ろにSpeed Star(強者揃いの東大チーム、翌日ぶっちぎりで優勝する)がいることに気づき、はえーと思っていました。

終わってから一度ホテル(東横INN横浜スタジアム前2)に戻って荷物を置き、夜の中華街に3人で繰り出しました。最初に中華っぽい食品を扱うスーパーを覗きました。僕以外の二人は何か買っていました。

おなかがすいたので、お昼を食べた金香楼の隣にある東光飯店というお店に入りました。pointNが名物っぽい東光チャーハンを、チャーハンに目がないniuezも何らかのチャーハンを、ruthenはエビの入ったラーメンを頼み、別途、回鍋肉と小籠包を注文しました。スープが飛び散って美味しくなるなどと競プロerにしか通じないネタで盛り上がりました。3人で割って1800円ぐらいだったと思います。

その後は中華街をゆるっと歩きました。さっきの中華スーパーに戻り、pointNは5個入りの胡麻団子を、niuezは肉まんを買いました。niuezが肉まんの大きさに驚いていました。胡麻団子は僕が独り占めしてすべて平らげたのですが、あれは2個目がピークです。好きなので5個なら平気ですが。その後、pointNとruthenはパンダまんを買いました。率直な感想として、僕は「中のあんこは美味しいけど外の皮が観光客の味がする」と述べました。

パンダまん

ホテルに戻り、一人で食べるには多いと、ruthenが中華スーパーで購入したバナナチップスを分けてくれました。お腹に余裕がまだあったので受け取り、明日7時にホテルで朝食という約束を再確認して解散しました。バナナチップスは自室でポリポリ食べました。

甘いものが連続して少し辛い物が食べたくなり、一人で近くのコンビニに行きました。レモンの炭酸と、カラムーチョを選択しました。お風呂に入ってから食べたのですが、カラムーチョは意外と量が多く(しかもちょっと増量キャンペーン中)、後半食べるのに苦戦しました。ABCもあったのですが、普通に無理なので寝ました。

寝たはいいものの、3時、5時、6時などに目が覚めてしまいました。途中、昔の同級生が出てくる夢を見たのですが、残念ながら全然楽しくないストーリーでした。トコジラミツイッターのトレンドに入っていたりして若干不安だったことなども眠りが浅かった要因かなと思っています。

日曜日(当日)

無事全員起床に成功し、ホテルのバイキングに並びました。麻婆豆腐があって珍しいと言ったらruthenから「中華街だからでは」という真っ当な指摘が入り、なるほどと思いました。自分たちが席に着いた頃から急に客の列が長くなり、早めに行って正解でした。

その後はスマホの充電器を忘れそうになりながらも荷物をまとめました。起きたらちょっとだけ残しておいた炭酸が凍っており、その画像をツイッターにアップし、飲まずに部屋に忘れました。3人そろってチェックアウトして集合場所(隣のホテルのロビー)に行きました。GoodByeの人から、近くの台湾チームに貰ったというパイナップルケーキをもらいました。いくら競プロerとはいえ、"闇討ち"というフレーズがすぐに浮かんでしまったのは反省です。コンテスト後にでもありがたくいただくことにして出発しました。ギリギリ傘がなくても耐えそうな雨が降っており、寒かったです。

会場で受付を済ませ、自分たちのスペースに入って準備をしました。荷物は半透明の袋に詰める必要があったのですがそこまで大きくなく、詰め放題の主婦の要領で袋を引き延ばすことでどうにか入れ込んだのですが、気づくと袋が破けてしまっていました。スタッフの人に袋を指さしながら Excuse me, my plastic bag is broken ... などと怪しい英語で事情を説明すると一回り大きな新しい袋を持ってきてくれました。Thank you.

会場

ほどなくして、コンテストが始まりました。初動は、ログイン情報の入った小封筒の開封とPCのセットアップをruthen、Aをniuez、問題文の入った大封筒の開封とBをpointNという分担で動きました。Bの問題文が若干難しく、僕がモタモタしている裏でAはあっという間に通っていた印象です。後で問題を見返したら普通に重実装だったので、niuezがうまくはまったという印象です。

いっぽうBを読んでも全然解法がわからない僕はniuezと協力してBを、ruthenが以降を眺める方針をとりました。niuezがLazy Segment Tree有名ながらおよそBで使うとは思えないデータ構造を使った解法に気づいたので、完全に信頼して僕も問題読みに加わりました。

Fが驚くほど簡単で、ruthenに軽く説明をし、Bを通したniuezにruthenから説明を行い(僕の説明があまりにも雑で窘められた、リハーサルのことがあったので完全にruthenが正しい)、後は実装マシーンniuezに任せました。Dを読んで区間DPっぽいことを確認したり、Kのインタラクティブなどを読みました。インタラクティブを優先的に読んだのは、形式の違う問題なら多くのチームに解ける可能性のある難易度調整にしているだろうというメタ読みをしていたためです。他にもいろいろ読んだのですが、僕の力では解法に至れる問題はありませんでした。

ruthenとniuezがFとDをやっている間にKを考えました。円の位置と大きさを特定する問題なのですが、とりあえずの大まかな位置の特定にかなりのクエリ数を使うため、残りの部分がなかなか詰められませんでした。その間にFDが通り、他は解法すら浮かばないのでKをとりあえず書いていくことになりました。乱択でクエリ数の期待値を減らすなど迷走し、二分探索で行ける、いやこれ三分探索にならないか、いややっぱり二分探索か、にしてもこれ場合分け面倒すぎませんか、などの議論を経て、算数を頑張ることで比較的シンプルに解ける方針を思いついたので、それを実装しました。しかしバグらせてしまい、いったん印刷してPCを離れたりしました。

その後はniuez-ruthenチームとpointNチームで唸る時間があったような気がします。なんやかんやあってKのバグに気づいたので修正し、サンプルが通ることを確認しました。他のサンプルがなくて不安などとほざいていたらniuezがインタラクティブツールの何かしらをいじってうまいことやってくれました。大感謝。それも通ったので問題ないと判断し、投げるとACが返ってきました。

その後は全員でGとTLEしているEを考えました。途中でトイレに行きたくなったのでスタッフに Can I go to the restroom? などと言い、連れて行ってもらいました。戻ってきて僕もruthenにEの解法をなんとなく聞いて高速化の検討をしたのですが、あまり活躍できませんでした。niuezがEのゼータメビウス変換?とかいうやつを思いつく裏で定数倍高速化を頑張ったruthenがそのEを通し6完、終了間際にniuezが投げた愚直のGはWAが返ってきました。

システムトラブルがあったチームがあるらしく(GoodBye?)、延長したりしなかったり、変な感じでコンテストは終了しました。途中、なんかやばそうなアナウンスがあった気がしますが、大丈夫だったようでよかったです。

コンテストが終わり、いつの間にか配られていたまい泉のすずらん弁当を食べました。配られたドーナツも食べました。僕はポン・デ・リングの亜種(ショコラ?)をもらいました。スポンサーの紹介を聞き、解説を聞き、我らがYesNoおじさんによるYes/Noがありました。Big O of N cubedは27位でした。3の3乗なのは何の因果でしょうか。個人的には、全員がACに貢献できたのは平和でよかったと思っています。

懇親会では大量の食糧が置いてあったのですが、昨晩のカラムーチョのせいかあまり食べられず、また知り合いが少ないのでやや心細い思いをしました。niuez周辺に人だかりができており、ゲームとかそういうので繋がりがあるのかな~と思いました。企業ブースも何ヶ所か回り、いくらかの戦利品を入手しました。Fixstarsのクイズに正解してポロシャツをもらったのが特に大きかったです。その他、先輩であるTsumoiYorozuさんにご挨拶をしたり、ITF.PCでお世話になったtatyamさんにお礼を言ったりしました。

友達をチャーハンに連れていくというniuezとはここでお別れし、ruthenと一緒に(幸せそうな人であふれる)赤レンガ倉庫やハンマーヘッドを散策しながら競プロ引退老人トークをしました。みなとみらい駅まで歩き、横浜でお土産を買って秋葉原へ、そしてTXに乗って家に帰りました。休日の格安回数券を使い忘れたことを今も少し後悔しています。

この景色を見ながら競プロトークしたのかよ

ICPC5回目、最後の年に横浜に行けて本当によかったです。ruthenさん、niuezさん、ありがとうございました。

おわりに

競プロと出会ってからそれなりに長い時間が経ちました。未だに青と黄色を反復してしまっていますが、競プロerとしてまあまあ成長できたのではないかと思います。これまでにチームを組んだ人たち、サークルの人たち、その他競プロを通じて出会った人たち、chokudaiさん、Mike Mirzayanov、コンテストを運営してくれている皆さん、ありがとうございました。やり残したことだらけなので、今後も競プロとはゆるく付き合っていければなと思っています。