tardigradeの競プロ日記

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

ICPC2022国内予選参加記

2022/07/08に開催された国内予選にチームTokishirazuで参加しました。

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

結果から書くと、ABCDの4完でペナが11000くらい、全体30位北大内1位でした。

コンテスト前

前日の夜は緊張と蒸し暑さで全く寝付けませんでした。4時になった時点で、2限の授業をぶっちすることを心に決めました。多分5時前には寝れて起きたのが12時なので、睡眠調整はばっちりです。

朝ごはん兼昼ごはんを食べながら、適当にAtCoderの問題を見ました。DPが出題されるだろうと山をはって、EDPCを中心に考察したり実装したりしましたが、これが良かったかと言われると正直微妙なところです。

一時間前くらいに家を出て大学に向かうと、すでにチームメイトの二人が来ていました。「緊張しますね~」と言いながら立ち回りを確認したりトイレの位置を確認したりして、コンテストが始まるのを待ちます。

今年は検索あり同時コーディングありで、普段のAtCoderのコンテストにかなり近い状況だったので、PCとルーズリーフと筆記用具とお守りのぬいぐるみだけを持っていきました。

立ち回り

「チーム内で一番力があるであろうSlephyさんに、なるべく多くの問題の考察をしてもらう」ということを基本方針として立ち回りを考えました。

Aは僕が担当、Bはとりあえず二人で見て、出来そうならSlephyさんがCにすぐ移動。僕がAを通した時or開始から20分たった時点でいったん情報を共有し、必要であれば戦略を立て直す、ということだけ最初に決めておきました。

コンテスト中

問題:

All Problems (iisf.or.jp)

去年は問題を読み込むのにかなり時間がかかったという話だったので、今年もそうなることを予想していましたが、運営がきちんと対策をしてくれたのか、スムーズに問題文を見ることができました。

A問題

例年通りかやや簡単めな印象を受けました。特に何も考えずに実装して提出するとAC。一時ファイルの場所を見失ってしまい、時間をロスしてしまったのは反省…。確か5分くらいで通せていたと思います。

C問題

Aを通したのでいったん3人で相談します。

B問題は実装するだけのようで、nmyさんが頑張っている途中でした。「あと30分あれば通る」というお言葉をいただいたので、17:10頃にまた進捗を確認しようという話になりました。

C問題はSlephyさんが考察を始めたばかりでした。「数学っぽい」「ARCみたい」「実装は軽いと思う」「そこまで難しくないはず」等々のアドバイス(?)をいただき、Cを引き継ぎます。一見無駄が多いようにも思えますが、僕もCを見て同様の感想を持ったのと、面倒そうな見た目をしているDをSlephyさんに処理してもらうメリットの方が大きいと考えたがゆえのムーブでした(実際これが大成功)。

DPやらO(1)数学やらに浮気しそうになりますが、手を動かしながら問題をにらんでいるとそれっぽい解法が降ってきました。自分では妥当性が示せなかったので、実装しながらSlephyさんに2回ほど相談をし、「あってる!」と太鼓判を押されたタイミングで投げてAC。この直前にnmyさんがBを通していました。

D問題

僕がCを通した時点で、Slephyさんが「D問題の本質にたどり着いた」「あとはそれをどう処理するか」とおっしゃっていたので、とりあえずnmyさんと一緒にそこまでの考察を聴きます。いろいろ質問したり自分の考えを共有したりしていると、Slephyさんが解法っぽいものに辿り着いたようで、再びそれを聴きます。

3人で話し合った結果、「かなり良さそう」という結論に至りました。実装量が少しありそうだったので、僕が実装をしてる間にnmyさんに手動でサンプルをチェックしてもらいました。Slephyさんはこの間、E問題の考察をしています。

その後、僕が実装をバグらせていることに気づいたのとほぼ同じタイミングで、nmyさんが解法の穴に気づきます。SlephyさんをE問題から呼び戻して解法を詰めなおすと、幸いにもこれまでのコードに+αの実装をするだけで良さそう、ということがわかりました。

順位表を見ると、その時点でEを通しているのは1チームだったため、一旦Eは放置して僕とSlephyさんのそれぞれで解の実装を、nmyさんがWAを吐いたとき用のチェッカー(愚直解)を実装することに決めます。

僕がバグを修正して実装の7割方を終えたタイミングで、Slephyさんから「サンプルが通りました」との報告が入ります(実装速すぎてビビった…)。3人でお祈りをしていると無事AC。この瞬間はめちゃめちゃ嬉しかったです。

E問題&F問題

EとFはあまり難易度差がなさそうだったので両方とも見ました。

Fは構文解析で、見た目のわりに内容は単純でしたが、考察の進め方が分からず断念。

Eを最後まで3人で考えていましたが、クリティカルな考察はできずに終わってしまいました。

感想

今回のMVPは間違いなくSlephyさんでした。Dの考察から実装まで整然とこなしていて、とても頼もしかったです。

加えて、立ち回りもかなり良かったように思います。今考えると、BやCで詰まると効率が悪い感じになりそうなので、一発ACしたnmyさんと僕もかなり偉いです(自画自賛)。

EとFは地力不足を痛感しました。いろいろ考察は出てきましたが、どれを深掘りするのがいいのか、そこに対する嗅覚が足りていませんでした。これからしっかり復習したいと思います。

大学に入学してから辛いことがたくさんあり、競プロにかなり懸けてる部分があったので、国内予選を通過してアジア地区予選に進めること、そしてこのコンテストを心から楽しめたことを、とても嬉しく思っています。チームを組んでくださったSlephyさん、nmyさんには感謝しかないです。

年末のアジア地区予選に向けて、また精進していきたいと思います。