heno239’s blog

まとめたいことをまとめる

ICPC 2021 Asia Yokohama Regional 参加記

  • まえがき

皆さんこんにちは、heno239です。

今回は 

ICPC 2021 Asia Yokohama Regional

にチーム「Heno World」で参加しました。

チームメンバーはheno239・yamunaku・moririn2528の3人で、去年とチーム名もメンバーも同じです。

わざわざ集まるのが面倒だった昨今の情勢を鑑みて、3人とも別の部屋からオンラインで出場することになりました。

 

  • 1日目(コンテスト前日)

この日は13:00からコンテストの参加受付がありました。

13時前にチームメンバーが全員集まったので安心感がありました。(色々あって受付は13:30ぐらいになりました)

13:50ぐらいから開会式があり、開会しました。

 

14:10から、本番と同じ環境を用いたpractice contestがありました。

コンテスト時間は2時間で、問題は去年の問題がそのまま使われていました。

去年の僕がE,F,H,I問題を実装していたので、practiceではそれ以外のA,B,C,D,G,J,KのうちA,B,C,J,Kを腕慣らしで通しました。1年経ってたのに全部解法を覚えていて、やっぱり印象に強く残るコンテストなんだなあと実感しました。

 

また、practice contestでは「assertがちゃんとRE返してくれるか」や「無限ループするとREになるか」や「bitsetの_first_bitが使えるか」や「美味しいカレーの作り方を書いたらACになるか」*1等、様々なことを確認しました。

 

practice contestが終わったあと、軽い質問時間がありました。

そこで「submissionした後にどのソースコードを提出したかを確認する方法はありますか?」という質問がありました。(submitはローカルファイルを選んで提出する形だったので、誤提出が起きやすかった、という事情がありました)

この質問に対する回答が「あると思うんだけど現状ない」みたいな感じで、結局翌日に「ある」になりました。

(去年は結局なかった(し、誰も指摘しなかった)ので、変わったのすごい)

 

参考資料(?)↓

 

質問時間が終わるとその日のプログラムは終わりで、あとは「ちゃんと早く寝る」だけになりました。

コンテストに向けて3日前ぐらいから23時寝7時起きみたいな生活をしていたので、その日も無事21時に寝ることができました。

 

  • 2日目(コンテスト当日)

朝3時に起きて、その後眠れませんでした。今もまだ眠れていないので1週間ずっと徹夜しています。

8時頃にはチームメンバー全員の起床が確認でき、いよいよ本番を待つこととなりました。

 

そして9:10からコンテストは始まりました。

 

  • コンテスト中

  1. チームメイト2人にAとBを任せて*2、自分はC以降の問題文を読む。
  2. まずKを読み、「時間をかければ解けるけどすぐには解けなさそう、順位表で他のチーム解かれてたらやろうかな」と思いパス
  3. やっぱり去年と同様にmod 998244353みたいなことが書いてある問題からやろうと思いなおし、問題文を"mod"があるかどうかで枝刈り探索していくと、G問題「mod 10^9+7」に到達。
  4. 問題を読むと一瞬で解法が浮かんだので実装するも、WA。(それなりに実装量もあるので実装ミスかな)と思い、小さいケースを手で作って試していると、考察ミスが発覚(自分の子が親で自分の親が子になるやつ)。修正してAC(FA)
  5. チームメイトの様子を見ているとAがACされ、BでWAが出て苦戦している様子。Bを手伝いに行き実装すると、自分もWAが出て頭を抱える。結局3人とも誤読していることを発見し、修正してAC
  6. この時点で開始1時間ほどで、順位表を見るとJが通されている。そこで自分がJに行き、チームメイトに他の問題を探ってもらう形に。
  7. Jで「overflow事故」「場合分け書き忘れ」「提出ファイル間違える」「ジャッジミス」の4連コンボが決まり、4ペナ出しつつなんとかAC。今になって思うと、早く解かなきゃ、とかなり焦っていた気がする(特に提出ファイル間違いについては・・・)
  8. Jで苦しんでいる間にC問題とD問題をチームメイトがそれぞれやってくれていたので、他の問題を見る。各問題の所感は、E問題:存在を忘れてた、F問題:ちょっと考えたけど分からない、そもそもTL:30sがやばすぎるので近寄りたくない、H問題:誤差の制約をどう使うか分からない、I問題:頑張れば解けそう、K問題:頑張れば解けそう、といった感じ。
  9. 上記の中からK問題を選び、突撃。この間にDはACされ、CはWAが出る。C問題のWAの原因特定も手伝いつつK問題を考える形に。
  10. 結局K問題に進展はなく、C問題は僕なしで通る。チームメイトありがとう・・・
  11. 3人そろったところで問題を見直し、自分もK問題の考察からI問題の考察に移行する。
  12. チームメイトとグラフのお絵描きをしながらI問題の考察をし、かなり順調にいって考察が完成する。そのまま実装し、AC(FA)を勝ち取る。この時点で7完がHeno Worldのみとなり、単独一位に浮上する。(そしてこの時点でほぼ2位に入るだろうと思っていた。)
  13. 相変わらずE問題の存在は忘れているしF問題はTL:30s,H問題は誤差で近づきたくないので、K問題に突撃。そのまま適当な嘘をいくつか投げて撃沈。(実はコンテスト後に誤読が発覚)。

そしてコンテストが終わりました。順位表は終了1時間前の状態のまま凍結されており、その時点ではUT a.k.a. Isには確実に負け、tonosamaやTLE_workには2問通されていると負ける、他のチームには大体勝ち、という状況でした。

 

特にtonosamaが怖かったので、ドキドキしながらYesNo(順位表開示イベント)を迎えました。

 

  • コンテスト後

まず問題の解説とスポンサー企業の紹介がありました。

問題の解説では、ヤバいと思って避けたF問題が実は解法から見ると普通の問題だったり、H問題の解説に驚いたり、K問題の解法になるほどと思ったりしたり、E問題の解法にうわあとなったりしました。特にF問題についてはACが出なかったことが驚くべきものでした(TLが30sというだけで全チームが避けた結果、こうなっているのだろうと思います。)

 

その後いよいよYesNoがありました。

YesNoの結果2位が確定し、例年通りであればほぼ確実にWorld Finalへの参加が決まりました。とても嬉しかったのを覚えています。

f:id:heno239:20220323192456p:plain

 

表彰式ではインタビューみたいなものがあったのですが、コメント内容はちゃんと準備したのに名乗るのを忘れてしまいました。その後に1位のUT a.k.a. Isの方々か素晴らしいインタビューをしていったので、社会性の違いを見せつけられる結果となってしまいました*3

 

その後、gatherにてオンライン懇親会が行われており、渾身の懇親をしました。20:00ぐらいに眠気に勝てなくなり、そこで僕のICPC 2021 Asia Yokohama Regionalは幕を閉じることとなりました。

  • あとがき

結果として2位をとり、おそらくWorld Finalへ行きます。

これでWorld Finalは3回目であり、World Finalの参加回数の上限規定に引っかかるため、来年はICPCに出られません。

結局、ICPC Asia Yokohama Regionalは3度参加し、そのうち2回がオンラインになってしまいました。ここ2年横浜の現地で他のチームの方々と交流できなかったのがとても心残りです。

World Finalも、

World Final 2019:オンラインで既に開催された

World Final 2020:今年11月に開催が予定されていて、どうなるか(オンラインになるかとか)が分からない

World Final 2021(今回の):どうなるか何も分からない

という感じで、かなり不明瞭な感じになっています。

 

2位をとった安堵の先にも後にも不安だらけですが、World Finalでも結果を残せるように頑張っていきたいです。

ICPC運営の皆さん、他のチームの皆さん、また特にチームメイトの2人へ、ありがとうございました。

 

  • おまけ

うまい棒ではずれを引いたので今回はおまけはありません。

*1:なりませんでした

*2:コンテストはA,B問題が簡単な2問と公表されており、それ以外の問題は難易度がランダムだった

*3:Give me sociability