ICPC2021国内予選参加記

202 Acceptedで参加し、全体32位、学内2位で突破しました!わーい

コンテストの振り返りと今後に向けて、特にチーム戦の戦い方について思ったことを書いていこうと思います。

チーム

あうあう(@auaua159)とむかでさん(@cloudman_P)と組みました。3人ともAtCoder highestは黄色ですが、今は内2人青に落ちて苦しんでいます、つらい。とは言え大失敗をしなければ順当に通過できるレベルとは思っていたので、ホスト校枠をあてにしつつも、できれば使わずに通過したいなと考えていました。結果はホスト校枠を潰さずに済んだので私としては大満足でした。

当日まで

4月にはチームが決まっていましたがなんだかんだ忙しいのを言い訳に全然アクションを起こしていませんでした。ようやく3人のDiscord鯖が立てられたのは、2週間前のことでした……

個人的にもインターンなどがありなかなか競プロができておらず、近づいてくる国内予選当日に怯えながら過ごしていました。

PG BATTLE

飛び賞ガチャ失敗(チーム戦と言っても特殊なので、特に書くことがありません)

模擬国内予選

なんか調子がすごく良くて、大活躍しました。というか3人ともたぶん調子良くて、各々の個人技で乗り切ったような傾向が強かったと思います。チームとしてのコミュニケーションも良く取れていてかなりリラックスして和気藹々とやっていました。

KUPC

模擬国内予選とは対照的に、嵌ってしまったところですぐにチームに相談できず、1人で苦しむ時間が長くなってしまいました。G問題まで取り組んでいましたがE,F,GどれもACまで持って行けず4完に終わりました。少しでも詰まったら早めにチームメイトに相談すべきだなと感じました。

本番当日

模擬国内予選でジャッジの仕様等はしっかり確認していたので、簡単にリハーサルを済ませて一度解散し、始まる15分前くらいにDiscordで通話を繋ぎました。本番直前も割とリラックスしていた気がします。模擬国内予選やKUPCのときと同じように私がA問題をすぐ通した後D以降を読んでおく、という作戦を決めました。

開始直後

上述の通り私がA問題を、むかでさんはB、あうあうはCを担当しました。Aは思っていたより問題設定が複雑で、何度も誤読しそうになり手を震わせながら提出しました。

Correct Answer!!

D,Eに目を通す

確か私がAを通したときは他2人ともある程度解法が固まっているようだったので、Dを読み始めました。ちょっと考えても嘘貪欲しか思いつかず、「ヤバい、これ苦手なやつだ」と思ったので、Bが通ったらむかでさんに任せることにしてEに進みました。今回はこの判断がたまたま大正解でした(ちなみに私はよくこのちょっと考えて分かんないから次行っちゃお、をやってしまうんですが、大抵はより難易度の高い次の問題に進んでも時間の無駄で大失敗になることが多いです)。

E問題は読んだらすぐ拡張dijkstraじゃんとなる見た目をしていました。最初タクシーに乗る回数が大きい場合(タクシーに乗る待ち時間が$2\times 10^{10}$を超えるとき)は考えなくて良いと勘違いしていたので、めちゃくちゃ簡単だと思っていました。よく考えるとそれではダメで答えは非常に大きくなることがありますが、実は答えは

(64 bit整数なら十分収まるくらいの数)+2^(32 bit整数で十分収まるくらいの数)

という形で表されることが分かります。この形の数値を持つstructを定義して比較関数とかオーバーロードして自然な拡張dijkstraをすれば解けます(想定解法と違うと思います)。解けるんですが実装がかなりしんどそうですね。

Fに打ちのめされる

Eは時間がかかりそうなので一旦Fも見てみることにしました。私は噓解法をたくさん錬成し、チームメイトと一緒にたくさん反例を作りました。無理じゃん。諦めてE問題に戻ることにしました。これも良い判断でした。チームで相談しつつ落ち着いて取り組む問題を決められたのがとても良かったです。

実装で苦しむ

ここから孤独な時間が続きます。あうあうはCに戻り、全方位木DPの実装を頑張っていました。むかでさんもDの解法を詰めて実装し、その後デバッグに苦しんでいました。私もEの実装をし、慣れないoperatorのオーバーロードなどに苦しみながらなんとか書きあげ、1ペナののち(もったいなかった!)ACしました。

これで残り50分くらいでABEの3完になり、この時点では確か全体50位くらい、学内3位だったと記憶しています。

CかDを通したい!!

順位表を眺めて、今あうあう、むかでさんがそれぞれ取り組んでいるC,Dのうちどちらか一方でも通せれば通過は確実だろうと考えました。そこで私はFを諦めて、C,Dのサポートに回ることにしました。むかでさんのDの実装を送ってもらって眺めると、幸いすぐに配列外参照している場所を見つけることができました(こういうの自分1人で見つけるのは本当に難しい)。これでほぼ予選突破が確定しました。

残りの時間は通過を確信してニコニコしながら、1人苦しんでいるあうあうの実装を全員でデバッグしましたが、直しきれずに終了。結局ABDEの4完となりました。

Asia Yokohama Regional に向けて

今回は冷静に戦略を立てたりチームで相談したりと、「チーム戦の戦い方」が上手くできた気がします。ただCを通せなかったのは若干心残りで、全体的に実装の重い辛いセットだったなと思いました。Cをあうあうにほぼ任せきりにして終盤まで解法や実装方針の共有を行わなかったのは結果的に失敗でした。またDのデバッグやEの1ペナも、もっと早めにチームメイトに相談していれば、改善の余地があったように思います。

「10分以上考察が停滞したら」「実装に15分以上かかりそうだったら」「バグが5分以上見つけられなかったら」など具体的な条件を予め決めておいて、すぐにチームメイトに相談する癖をつけることが、チーム戦においてとても重要なのではないかと思います。思考の共有にかかるコストを考慮しても、大失敗せずに安定して成績を残すために十分すぎるメリットがあるように思います。特に我々のチームは実力がかなり拮抗した3人なので、1人で苦しまないことが良い結果に繋がりそうです。

コミュニケーション大事!!!!

 

以上、最後までお読みいただきありがとうございました。チームメイトの参加記も貼っておきます。

auauaaaa.hatenablog.com

centipede-kyopro.hatenablog.com