WUPC2020に、つるさん(@oinori1197)とチーム名「sleep_and_beer」で参加しました。お互いに初めてのチーム戦で不安もありましたが、結果としてすごく楽しめました。ここに記録を残します。
事前準備
- お互いの得意苦手を考慮して優先担当を決めておく。
つるさん:フロー、数え上げ、数学
私:ゲーム - 使用言語が異なるためコーディング方針は各自に任せる。
- コンテスト開始直後は私がA問題、つるさんがB問題を考える。
- 順位表で既に解かれている問題を中心に考える。
コンテスト開始
序盤1(ここまで0完)
私がA問題を、つるさんがB問題を考える。
A問題:場合分けで焦った。緊張で手汗がすごかった。AC(私 00:06)
B問題:構築問題だったようで、つるさんから相談を受ける。
つるさん「(問題の概要を説明)」
私「n が偶数のとき、B_i、B_(i + 1) を適当に決めると A_i * B_i + A_(i + 1) * B_(i + 1) = 0 にできますね」
つるさん「確かに…!!」
私「でも n が奇数のときはどうするんでしょう…」
つるさん「奇数のときは (省略*1)するとうまくできますね」
私「確かに…!!」
みたいな話をして、無事AC(つるさん 00:22)
序盤2(ここまで2完)
私がC問題を、つるさんがF問題を考える。
C問題:題意を理解したところで、解法が全く見えない。つるさんに相談。
私「(問題の概要を説明)」
つるさん「最大値を求める問題なのに、MOD = 10 ** 9 + 7 を取るんですね」
私「たしかに…なんでだろう…」
落ち着いて考えると、二項係数で重みを考慮した総和を考えると良いことに気づく。「だから、MODを取る設定だったのねー」と合点。サンプルがあったので提出。 AC(私 00:35)
F問題:つるさんがサクッと通してくれた。ありがてえ。AC(つるさん 00:48)
中盤1(ここまで4完)
順位表から、M問題が解かれてたので見る。
私「これ全方位木DPにしか見えないんですがどうですか…?」
つるさん「全方位木DPですね…」
実装の担当をつるさんに押し付けお願いしました。AC(つるさん 01:23)
︙
つるさんがM問題を実装している間に、G問題を考える。
- ナップサックで前計算した後に、DPすれば解けるのでは…?
- dp[休憩をした回数][現在の時刻]で最大筋力を計算できる? → 一回の遷移にO(T)かかりそうなので、合計O(T^3)で厳しい。
- DP[最後に休憩した時刻][現在時刻]で最大筋力を計算すると、合計O(T^2)でいけそう...?
つるさんがM問題を通した後、実装に取り掛かるが遷移が破滅。つるさんに助けを求める。
私「G、なんかバグります…」
私「何もしてないのに遷移が壊れました…」
私「自分が書いたコードをうまく説明できません…」
みたいな話をしてしまって、かなり落ち込む。つるさんに話を聞いてもらうことで冷静にれたのか、個数制限なしナップサックで解けることに気づく。何とかAC(私 02:08)
中盤2(ここまで6完)
つるさんがE問題を、私がJ問題を考える。
E問題:サンプルがなかなか合わず苦戦してた模様。コンテスト終了後に聞いたところ、包除のあれこれでバグってたようでした(包除バグらせがち、分かる)。無事AC(つるさん 03:26)
J問題:SCCして逆辺を貼ってDFSすれば行けるのでは?実装もそんなに難しくなさそう。
K問題:こういうのはまねっこ戦略なんですよね〜 → まねっこ戦略じゃん!
つるさんから、コーディングを譲ってもらって実装。KとJをAC(02:36, 02:53)。コンテスト前に相談していたように、ゲームを担当して解けたので安心しました。
残り1時間30分 (ここまで9完)
この時点で、I問題を30人ほど解いてたので解きたい。つるさんが残りの問題をざっと見たところ、L問題の考察を進められそうとのことで、
- I問題:私
- L問題:つるさん
で分担。つるさんが机上でカリカリと考察を進める間、I問題の目処が立ったので、実験コードを書きながら実装。
- サンプルが合ったので提出(04:10) → TLE
- 計算量を見直して提出(04:33) → RE
- バグを発見したので修正して提出(04:37) → WA
- バグを発見したので修正して提出(04:44) → WA
消えたい…
残り15分(ここまで9完)
L問題に関して、つるさんから相談を受ける。
つるさん「三項間漸化式に落とせたんですが、どうしたらいいのか悩んでて…」
私「行列累乗ですかね?」
つるさん「累乗和として求める方法が分からないんですよね」
私「あー、ABCか蟻本で見たことあるような…(蟻本P184に累乗和の話があることを発見する)」
つるさん「これっぽいです、実装してみます!」
つるさん、L問題をコーディングする。私、I問題のバグを目視で探す。
残り3分(ここまで9完)
ん?これを
こうすると…?
I問題、AC(04:58)!!
バグらせすぎなんだよなぁ...
残り0分
ABCEFGIJKMの10完、全体35位でした。わいわい
残り−10分
つるさんがL問題をAC!!「流石やでぇ…!!」となりました。本当に惜しかった…
感想など
- チーム戦、楽しい!!!!!!!!!!!!!!
- 得意不得意をお互いに補えたので良かった。私が取っ掛かりすら掴めなさそうなE問題、L問題を相方が解き進めているという安心感。私は私で、K問題やちょっとした相談などで役割を果たせて良かった。
- 5時間、意外と集中できる。持て余す時間はなかった。
- 使用言語が違ってもなんとかなった。ただ、言語が一緒だとお互いのバグ取りなどスムーズにいってた可能性はありそう。
- コンテスト全体のうち、あと10分ほど時間を捻出できたらL問題通ってたよなぁ。バグを減らすのもそうなんですが、慣れや進め方でも時短できそう。チーム戦面白い。
おわりに
つるさん、チーム一緒に組めて楽しかったです、ありがとうございました。運営の皆さん、面白い問題揃いでまたとない5時間でした、ありがとうございました。
*1:x * b_0 + y * b_1 + z * b_2 について、b_0 = -z, b_1 = -z, b_2 = x + y とすると良いです