開始前はFPSゲームをほぼプレイしたことがなく(強いて言えばLeft 4 Dead 2を数時間やった程度)、対人FPSに至っては全く経験がないという状態でした。そもそもキーボードとマウスを用いたアクションゲームでさえMinecraftを多少やった程度です。しかしDiscordの通話に参加するたびに皆がVALORANTをやっているというような状況だったため、せっかくの機会だと思って始めました。
会場に入るとお菓子が入った袋が置かれていましたが、それ以外は Day 1 と変わりませんでした。
(具体的な時刻は覚えていませんが、お弁当も昼過ぎに配布されました。)
特に遅延などはなくコンテストが始まりました。
コンテスト
※コンテストから数日が経過しているので一部の記憶が曖昧です。
国内予選では ruthen がセットアップと A を、pointN さんが B を、niuez さんが C 以降を読むことにしていましたが、今回は ruthen がセットアップを行い、niuez さんが A を、pointN さんが B やそれ以降を読むことにしました。
これは問題文が封筒に入っており開始直後から A 問題を読めるため、また、セットアップが国内予選と比べてやや面倒であるためです。
セットアップが終わったら niuez さんが A を解けていたのでパソコンを渡し、AC。
B は pointN さんが読んでいましたがぱっと見わからないとのことだったので、niuez さんも B に参加し、ruthen は C 以降を読むことにします。
niuez さんが B は遅延セグメント木を使えば解けると言っていたので、実装を任せ、pointN さんと ruthen は問題に目を通していきます。
その頃順位表では F が通されていたので、pointN さんが読むと解法がわかり、内容を聞いて良さそうだったので B を通した niuez さんに F の解法を説明して実装してもらいます。F はすぐに通りました。
自分は CH あたりを読んでいましたが解けておらず、順位表を見ると DEK あたりが(たしか)解かれており、D は pointN さんが読んでいたので内容を聞きます。
E に提出しますが TLE で、コードを印刷して高速化について考えます。
おそらくこの前後に K が通り、チームとしては E の高速化と G の解法を並行して考えます。
E については最終的に定数倍高速化手法をいくつか試したところ通りました。非想定だと思って についてしばらく考えていたのですが、もうすこし早く試しても良かったと反省しています。
その後 G に取り組みます。自分は E に取り組んでいたこともあり解法を理解していなかったのですが、niuez さんが TLE すると言いつつコードが書きあがっていたので、提出してみることを提案し、ジャッジ結果を確認したところ WA が返ってきてしまいました。その後少ししてコンテストが終了しました。
コンテスト終了後
コンテスト後はスポンサー企業の紹介→問題の解説→ Yes/No の順で進みました。
Big O of N cubed は 6 完で 27 位でした。台湾勢のチーム数を踏まえると国内予選とほぼ同じ順位という感じですね。
その頃 B が AC したこともあり、pointN さんに C の概要を投げて、niuez さんが D の実装を始めます。
デバッグなどを終えて D を提出してみると WA が出たため、コードを印刷してデバッグを開始し、その間に pointN さんに C の実装を任せます。
D の実行があまりにも高速に終わったため、別に 5 要素を全探索しても良いのでは、ということで実装を変更したところ AC します。
その後 C も pointN さんが AC します。(完全に丸投げしたのに通していてすごい。)
E の AC 数が F より多かったため、E を考えます。
ぱっと見で の DP が思いつきますが、それ以上オーダーが落ちません。
しばらくして niuez さんが dp[i][y] = i 番目の要素の y 座標を y に固定し、x 座標は動かさない時の最小コスト というような DP を考案し(多分)、遷移を式変形して観察すると Range Minimum Query の Segment Tree で解けるということで実装を開始します。
実装を見つつ、ruthen と pointN さんは他の解法がないかを考えます。その後終了 30 分前くらいに、pointN さんが dp[i][c] = i 番目までの位置を決めており、現在のコストが c のときの最大の (x, y) の位置 という DP を考案します。