Euldernaの競技プログラミングメモ

主に気になった問題やライブラリの確認に使った問題を示します。

ICPC国内ボーダーで4年間戦った話

最期のICPC国内予選が終わった。 思えば国内を余裕で通過したことなんてないので、いろいろと思い出を文章にした。

2016年(学部2年:Maximum-UniSchoolFleet 88位3完 予選敗退)

当時放送中だったアニメに乗っかって命名した。

C問題だった竹の花までを調子よく通してさぁD問題だとなったコンテストだった。

D問題のだるま落としを前にした考察は不思議と覚えていて、実は全探索回が通るのではないかと思ってとりあえず書いてみたり、何か気づいていない貪欲な方法があるんではないかと思いながら時間だけが過ぎていった。愚直回を前にへらへらと笑いながら、滅茶苦茶悔しかった。

当時の自分は有効なコンパイルオプション、定数倍の高速化、区間DPといったことを知らなかった。終わった後に、サークルの先輩から区間DPであるという話を聞き、自分が蟻本を全く理解していないんだなという事を理解した年だった。

  • Dを通すのが国内予選の大正義
  • 蟻本を基礎からやり直す

みたいなことを翌年までの課題にした気がします。ちなみにそれらは2019年、どちらも達成されていません。

2017年(学部3年:Maximum-omake 54位4完 予選通過)

命名は僕の好きなローグライクゲームに由来。

qcw君、seica君と去年とはまったくチームメンバーが違った。Maximum(埼玉大学プログラミングサークル)の中で強い人間を3人引っ張ってきたメンバーなので敗退は許されなかった。当時の

AtCoder的には緑3人の弱小チームだったので戦略を滅茶苦茶に練った。

A,Cが僕が担当している間にBをqcw君、seica君が担当して全員でDという戦略をとった。

しかし本番中に事件が発生した。Cの考察を終えある程度の実装を詰めたところで、qcw君が実装しているBの方針がまったく分からなかった。自分がむりやり交代する形でB,Cを通して、去年と同じD問題に挑む形になった。(この交代の時、自分自身のメンタルのコントロールがうまくできずかなり厳しい言葉を使ってしまったことを今でもかなり後悔している)

D問題の弁当作りは本当に何も分からずに、とりあえず愚直解を書いた。何かの間違いで高速かもしれないとか思ってた。実際は最悪のテストケースが少なくて(テストケースは想定解のせいか20-30あたりのn,mが多かった)意外と高速に回った(最悪ケースで固まる)。 終了20分前にseica君がnとmの小さい方でbitDPでは? と言った。僕はそれが通る保証もないし今からバグらせずに実装するのは無理だと思って、愚直解枝刈りを書くことにした。 qcw君は本当にできた人間で、B問題でひどい言葉を投げた僕とペアプロをしてくれたりした。

あとは各テストケース5分ずつくらいかけてAC。

そのあとseica君の解法があってることが分かって、ぜってーこいつには勝てねぇわ。となった。 そうしてみんなで仲良くアジア地区。

で終われば良いのだが実は予選落ちしていた。チームで仲良く数えたら枠数が足りていなかった。4完が大正義とは何だったのか しかし当時は謎枠が存在し、運営のお気持ちで数チームが選抜される。加えて一個上のチームが特別枠で予選通過したことで拾われる形で予選通過した。詳しくは順位表ページに詳しい。最下位通過である。 結果が発表されるまでの一週間、何も手につかなかった。

https://icpc.iisf.or.jp/2017-tsukuba/results/

発表時Twitterで必死にエゴサしたりしていたのは秘密 ここからqcw君、seica君が死ぬほど強くなりアジア地区で結構いい成績をとるのだが割愛。

2018年(学部4年:Semuderna 62位4完 予選通過)

チーム名はチームメンバーのPrefixに由来。

qcw君が他大受験に集中するため離脱したので、代わりにmamumamu君が入った。 もうこの当時は普通にseica君が強いのでDは彼に投げた。 A-Cを通せばいいだけのイージーな回のはずで、実際Cは結構早めに方針が立って通した記憶がある。しかしBの折り紙を最後までバグらせ続けてる間にseica君がDを通してしまい死ぬほど焦っていた。 最終的にはseica君に『頼むから俺に任せてくれ』といってBを実装しきった。去年は無理やり交代させておいて、自分の番になるとこの発言。己のワガママさに呆れる。

コンテスト終了後、順位的に通ってるか怪しいので、seica君と順位表を睨みながら数えた。結果、通過していた。

結果として、強い後輩がいればICPCは余裕なんだなと分かった。おすすめのICPC対策です。

2019年(修士1年:Yazaten 78位3完 (多分)予選通過)

チーム名はYazatenさんに由来。

NAIST(奈良にある大学院大学)に進学。人が集まればICPC出たいなぁと思っていたらhrbtさんが声をかけてくれて、hrbtさん・hgs君(競技プログラミング初心者)と参加することになった。

何度かチーム練習をするうちにどうも、このチームでDを解く前提の動きをするのはまずいのではないかと思った。本来であれば、Aをhgs君が実装しているうちにB-Dの考察を他2人が詰めるのが正道であって、A問題はそもそもそのため(初心者がチーム入っても仕事ができるよう)に配置されているはずだと考えていた。

それでも自分がA,Cを解くという早解きを主張したのは、去年の講評から不穏な雰囲気を感じ取ったため結構、強行に早解き戦略を主張した。結果としてhgs君の仕事が無くなってしまってそのフォローアップも出来なかったのはかなり反省している。(gdbの使い方を勉強してもらうとかあった気がする)

ちなみに本番では、30分前に使えていたAtomが起動しないせいでメンタルがぼろぼろになり、A問題から早解きも何もありませんでした。C問題はとにかくWAを出さないことだけを意識した。

終了後、hrbtさんと順位表を持ってきて枠を数える、50-60位あたりで滅茶苦茶枠数が減っていって顔が青白くなる。

何とか枠が足りていて(48/49)、本当に僕のICPCはギリギリだなぁと思いました。