つちのこの日記

競プロと音ゲーがメインです。

ICPC2020 国内予選 参加記

昨日はICPC2020国内予選に参加しました。チームは毎度おなじみのSPJ(クマー、zkou、私)です。

本番の記録

  • 16:30〜

あれ?サイトに繋がりません。めちゃくちゃ焦ります。電話をしても繋がりません。なんか10分ぐらいしたら急に治りました。

  • 16:40〜

打ち合わせの通りに私がA、zkouがBを通します。クマーがCで苦戦しているので見ていくと、3乗根っぽいのはわかりますが解けません。(ここ戦犯ポイント1) めちゃくちゃみんなで高速化を考えてると、愚直解の実行が終わっています。ここまでで1時間くらい使ったのが結果的にはかなり痛かったね、、、

  • 17:40〜

DとEを並列に読みます。Dは構文解析パートは易しそうで、その後の解法について制約等からbitDPとかを考えるんですけど、これが良くなかったです。(戦犯ポイント2) 答え決め打って頑張るとかまでは思いついていたので、どうして順序を割り振ってbit全探索が出てこなかったのか、、、 結果的にDを通していれば余裕で予選通過だったので非常に悔やまれます。

Eは最初木DP?とか思うんですけど、全然木じゃなかったです笑(くまーにおこられました) 

  • 18:30〜

EがbitDPで高速ゼータ変換してうんちゃらするとかいう方針をzkouが思いつきます。(天才) 私は高速ゼータ変換良くわかっていないので(これは良くない)、一人でDを考えていました。

Dがよくわからないので、Fを見にいくと、これは部分永続Union-Findで勝てそうな問題に見えます。 辺の長さが小さい順からUFの辺を削除していって(これは部分永続Union-Findで簡単にできます(逆から辺を貼ればいいので))、最大じゃなくなった頂点集合を消していき、最終的に頂点集合のサイズが1となったときに残っている頂点が答えっぽいことに気付きます。これはどう見てもΟ(NMlogN)くらいかかりそうなんですけど、ちょっと高速化すればここまでにはならなさそう?と思ってコードを書き、実装すると5分くらいでデータセット1が終わります。

ノリノリで提出すると、WAと出てイライラします。入力と出力をじーっと比較すると、なんと1行まるまる飛んでいます。(N,M)=(1,0)のコーナーケースが入っていたそうです(ひどい) ここを直してFをACしました。

  • 19:00〜

くまーとzkouがEを頑張って書いているのですが、サンプルすら合いません。デバッグを応援しながらDを考えるのですが、全然解けません。デバッグを応援していると、終了直前でなんとかEが通り、そのまま終了。

結果は23位で大学内8位、予選敗退でした。

f:id:tsuchinok:20201107102445p:plain

感想

初めての参加ということもあり、緊張しましたがコンテスト自体は非常に楽しかったです。結果も、黄黄青の3人チームにしては上出来だと思いますが、Dが通せなかったのがとても悔しいです。

来年はもっと強くなってリベンジしたい、そう思いました。