ICPC 模擬国内予選 2019

 

2019/Practice/模擬国内予選 - ACM-ICPC Japanese Alumni Group の参加記です。僕は模擬国内に参加するのは初めて。結論だけ書くと優勝した。

コンテストの様子

 へのくんがいつものを書いてる間にやむなくがA、僕がBを読む。Aはまぁできるのでやむなくが書く。AC。Bもうまいやり方はありそうだなぁと思いながら脳死01BFSを書く。AC。10分くらいかかってるのちょっと遅かったかも。

 へのくんがCが解けたらしいので書いてもらう。2WAしてAC。2回目のWAはサンプルで落ちてたらしいのでそこは反省?なんとなく順位表を見ると最速3完だったので記念撮影。CはFAだったらしい。

 そのままやむなくがDの実装に入る。僕は、rotateは最初だけでいいと思ってたけどダメでeraseのときは工夫する必要がありますみたいな解法を聞いて、「実はそのケースは他で考慮できてることになってたりしない?」とか「すげぇ本当だ、たぶんあってそう、わからねぇ」とか返す係をした(つまり邪魔では?)。1発AC。すごい。DもFAだったらしく4完も最速だったのでまた記念撮影。調子いいねとかまぁでもうちのチームは序盤勝負だしなとか言ってた。

 やむなくくんがDを書いてるときにへのくんとEの相談をする。3列について、どの2列についても両立できるなら3列でも両立できる気がするって話になって、てんぷらは「ほんとかなぁ。嘘では?」とか言ってた(無能)。反例が全く作れないことからできることがわかって、だったら半分全列挙で終わりですとへのくんが言うので、僕は「確かに、すごい」って言った。そのまま実装もへのくんがしてAC。5完も最速だったので例によって記念撮影。

 へのくんがEの実装をしている間にやむなくと相談してFもGも解けた気持ちになる。Eの実装が終わった後へのくんにFの説明をして書いてもらうことにする。僕「前後|Q|-1文字ずつ残しておくとよさそう。一致判定どうしよう。」への「Zアルゴリズムでできます。繰り返しの実装が文字数短い間は二分累乗みたいに足したほうがよさそうで大変なんですけどどうしましょう。」僕「全部二分累乗で実装すればmergeだけの実装でいいじゃん」みたいな感じでどんどん実装がよくなる。これぞチーム戦。とはいえバグって、必死のデバッグをする。いろいろ直すとサンプルが通る。やむなくが作った強めのテストケースを試すと1つも通らない。再びデバッグ。色々直してデバッグもほとんど終わった頃に順位表をなんとなく見ると、6完チームが出てきてて3位に落ちてたものの10数分以内に通せばペナ差で逆転できることに気づいたのでへのくんを煽る(最悪)。無事書き終わって、やむなくテストも全部通過したので出す。通る。やったぜ。

 この後30分くらいあったので一応Gを書こうとするけどそもそも実装方針があまり良くなかったりで間に合わず。

 結果はまさかの全体1位。めちゃくちゃ嬉しいけどあんまり実感はなくて、正直なことをいうとこういうのは本番でやりたい(それはそう)。

 

反省とか

 A〜Eまでが1時間ちょっとで通って、間でパソコンが空くこともほとんどなかったのはとても良かった。てんぷら仕事してないけど。

 Fのデバッグも全員でコード読んでバグ見つけれたり、強めのケース試してWAを防げたりしたのでよかった。

 個人的にはかなりの時間考えてたHがまったく歯が立たなかったのが悔しいけど、全体としては大成功だと思う。

 

 とはいえ模擬だけ勝っても何にもならないし、むしろこれで国内予選で失敗したら笑えないギャグもいいところなので、国内まではあと2週間もないけど気を引き締めて本番に臨みたいね。