tardigradeの競プロ日記

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

ICPC2022アジア地区予選参加記

2022/12/28に開催されたアジア地区予選にチームTokishirazuで参加しました。

メンバーはSlephyさん、nmyさん、僕(tardigrade)です。

結果から書くと、ABFGの4完で29位(4完中最下位)でした。

大会終了直後に急いで書いているので、ところどころ読みにくいところもあるかと思います。 後々こっそり修正するかもしれません。

~コンテスト前夜

僕は25日から横浜入りしていました。

25日は横浜に来てくれた高校時代の友達と中華街を中心に散策し、夜はAGCに参加しました。

26日はICPCの過去問を解いて、夜は中華街の食べ歩きをしました。

27日は午後から開会式とリハーサルがあり、環境の確認をしたりOBの方々と交流したりして過ごしました。かの有名な双子とお話しさせていただく機会もあり、なかなか貴重な経験でした。「北大こどげ強くないですか?」「天下一プロコン優勝してて凄い」という嬉しいお言葉もいただけました。

コンテスト前夜~コンテスト直前

緊張と興奮であまりよく眠れませんでした。寝つくのはかなり早かったのですが、ちょくちょく目が覚めて苦しい思いをしました。

朝は7時過ぎに起きて、リハーサルのときに貰った菓子パンを食べつつ、ずっと温めていた青diffの問題を一つ通すなどしました。アドレナリンが出ていたのかわかりませんが、頭の調子は悪くなかったと思います。

8時半にチームメイトとホテルのエントランスに集合して会場に向かいました。Slephyさんは僕と同じくあまり眠れなかったみたいですが、nmyさんは「しっかり寝ちゃってごめんなさい(*'ω'*)」といつもの調子で構えていらっしゃったのがとても心強かったです。

会場についてからは、持ってきた資料を整えたりスマホやリュックを袋に詰めたりして、コンテストの開始を待っていました。

コンテスト開始直後

事前の話し合いで、僕がAを、SlephyさんがBを、nmyさんが環境構築を担当することになっていました。

予定通りSlepyさんから問題冊子を受け取り、さぁ目を通そう!というところで問題が発生します。

ログインができない!!!!!

実はリハーサルのときも同じ問題が起きていたのですが、本番でも同じことが起きてしまいました(PCの不調?)

係の方に見てもらい、PCを再起動してもらうことに。運営の方々の配慮により自分たちだけコンテスト時間を3分伸ばしていただきました。ありがとうございました。

A問題

問題はかなりシンプルで、解法もすぐに思いつきます。

nmyさんが最低限の環境構築を終えるのを待ってすぐにバトンタッチ、そのまま特に詰まることなくACしました。

この間、Slephyさんとnmyさんは二人でB問題に取り組んでいました。

B問題

Slephyさんから大まかな考察を共有していただきます。僕がかなり雑な考察を投げると、先輩方がいい感じに整形してくださって、実装はまた僕が受け持ちました。

二分探索の境界値をミスって1ペナ(大反省)しましたが、これもわりとすんなり通せた感覚です。

D問題

Slephyさんがいろいろな問題に目を通してくださって、「これ行けそう!」という問題を渡してもらいます。 nmyさんと一緒に考察を詰めて、実装はまた僕の担当に。

「実装重たい頭壊れる~」と思いながら頑張って実装をしました。この間にnmyさんとSlephyさんはF問題とG問題を見ていたと思います。

実装を終えて(実はあんまり重たくなかった)投げるとペナが付きました。解法には自信があったのでびっくりです。

デバッグには時間がかかりそうだったのと、G問題の考察がすでに終わっているらしいので、ここでnmyさんとバトンタッチ。

コードを印刷してSlephyさんと一緒に間違っていそうなところを探す作業に入りました。

F問題・G問題

D問題のバグが一向に見つからないので、Slephyさんから一旦F問題の概要と考察を聞きます。

「なるほど~確かに」と相槌を打っていると、いつの間にか簡単な部分和問題に帰着しました(びっくり)。 G問題のサンプルが合わなくてnmyさんが苦しそうだったので、ここで再び交代します。

二人がG問題のデバッグを進めている間にF問題の実装に取り掛かりました。 やることは簡単なDPだったのに実装が下手くそ(mapを使いました)でTLEを連発。 解法はあってるはずだと信じて、定数倍高速化の道を模索することに…。

自分が苦しい時間はnmyさんがGの実装を、nmyさんが苦しい時間は自分がFの実装を、Slephyさんは僕が書いたDの解法の粗探しをしつつ他二人のサポートを、という体制で戦う時間がしばらく続きました。

順位表が凍結して20分がすぎたタイミングで、ついにGの実装を詰め切ってAC。殻が一つ破れました。

D問題・F問題

残り時間も少なくなる中、D問題のデバッグとF問題の定数倍高速化を続けます。 F問題の方は、PBDSのhash_mapを使ったり、QCFiumをつけたり、cin/coutの高速化をしたり、本当にいろんなことをしました。

D問題の方も、手動でいろんなテストケースを作ってもらったり、assert入れて投げたり、こちらもいろんなことを試しました。

そんなことを続けていると、終了20~30分前についにF問題が通ります。どうやらmapを持ったのが大悪手で、素直にvectorを持つのが良かったようです。うーー悔しい。過去に、mapでDPテーブルを持つとTLEせずに通る、という問題を解いたのですが、その時の記憶に引っ張られていました。

テキトーに考えてテキトーにAC数増やしてるからそんなことになるんだぞもっときちんと問題に向き合えよ(自戒)

そしてD問題の方は通せずにコンテストが終了してしまいました…こっちも悔しい…。

コンテスト後

Dの解説を聞いたのですが、結局自分の解法の何が悪いのかわからず…これからまた考えます。

<追記>

F問題は難問想定だったようで、これはちょっと意外でした。あと解説がwataさんで、感動しました(いつもyoutbe越しにマラソンの解説を聞いていたので)。

Yes/Noはやっぱり盛り上がりました。自分たちのチームは凍結後に2問通していたのですが、他のチームもいっぱい通されていて、すごいな~悔しいな~と思うなどしました。

それと、ものすごく当たり前のことではありますが、上位勢は強いなと思いました。来年・再来年はもっと勝負できるように実力をつけたいです。

終わり

応援していただいた皆さん、ありがとうございました。

これからまた、来年の国内予選に向けて精進していきたいと思います。