JOI2023/2024本選参加記

2024/1/28,2/4に開催されたJOI 2023/2024本選に参加しました。その参加記です。

2/3以前

今年のJOIの自己紹介動画はなんか期限が去年よりもかなり早く設定されていて、今年は同学年の競プロerでやる新年会でロシアンたこ焼きやるのでは間に合わなくて、ネタに困ってしまった。ずるずる引きずってたらついに期限の大晦日になってしまった。家の事情で忘年会に行っていて、普通に諦めて夏撮った自分の写真に言葉を添えて提出した。

本選競技については、今年は春合宿に行きたいと思っていたのだけれども、普段からJOIサボる人はずっとサボるらしく、結局本選競技の週になってようやくJOIの過去問に触り始めた。でも結局触ったものといえば、去年の本選と一昨年の本選だけで、結局数問しか追加では解いてなくて、JOI本選には
難易度7 : 8/51 AC
難易度8 : 3/33 AC
難易度9 : 4/60 AC
難易度10 : 1/48 AC
難易度11 : 0/59 AC
難易度12 : 1/41 AC
という悲惨な状況で挑んだ。

海外OIも、同学年の競プロer数人でバチャで手をつけようとしたが、自分は通した人に解法は正しいと言われたのに、実装が下手すぎて永遠に通せなくて、萎えて結局1問も解けていない。2/3にtatyamさんがJOI本選模擬を立ててくれていたが、自分はちょうどその時間にUniversal Cupをしおむすびと走っていた(途中で17も合流した)ので出れず、結局本選当日も起きてもJOIの過去問すら全然できてないのに海外OIを触る気持ちにはなれなくてぼーっと今年の二次予選の問題を眺めていた。

1/28 開会式/交流会

開会式、せっかくの開会式ではあるのだけれどもなんかその時間帯は鬱になっていたのか、全く開会式の映像を見る気が起きず、JOIの過去問をぼーっと眺めていた。

夜は双子によるチューター企画/交流会があって、今年もヒューリスティックなのかなあと絶望していたところ(ヒューリスティックが全くできないため)、今年のチューター企画は、10問の暗号化された問題文から問題文を復元してその問題に答えるというのをはや解きするというものだったので救われた。チューター企画のチームメイトはhiikunZとかめで、チームメイトが強くて色々上手く行って、結果としては最速提出でunique全巻できて、自分のチーム的にはアツかった。hiikunZとかめありがとう!

チューター企画後、DiscordのVCでGartic Phoneをやったのだけれども、今まで見たことのない人数が通話に入ってるのを見て、少しビビった。

2/3

Universal Cupに出るところまでは上に書いた。21:00からABCに出た。全完したのだがパフォーマンスが黄色ギリギリで順位も300+で、どういうこと?になってしまった。問題は配点の割に簡単だったし、どうやらEは既出でGはLibrary Checkerから貼れば解決したらしい。Eの既出は、覚えてなくてもまあありうる話だったが、Gを解くときLibrary Checkerの存在が完全に頭から抜けていて、それはまずいですねという感じ。そんなこんなでGは永続セグ木で解く問題に見えたので、永続セグ木で解いた。Fで大変なことになった結果、全完が遅くなる+ペナがいっぱいつくなどでこんな感じに。

2/4

ABC後、通話で虚無のABCの話は終えて、kemuniku鯖でBGAアグリコラをしてる人たちに合流し、自分は一回オリフラムをして寝たが、時間が1:30くらいをまわっていて、起床が少し心配だった。無事10時前に起きると、それから朝ご飯食べるなど支度をしてJOIの過去問を眺めていた。本選開始直前にAtCoderのコードテストが不穏な動きを見せて、これは愛しのpaiza.ioの出番か?と思いきや復活したのでAtCoderのコードテストで行くことにする。ヤシの実サイダーを用意して競技に臨んだ。(ちなみに適当に手に取ったヤシの実サイダーは御坂美琴缶だった 。きっと味方してくれるだろうと信じて競技に臨んだ。)

競技パート

とりあえずkaichou243伝統芸能の問題順を無視して解くをやろうと思っていて、まずB問題を開いた。割といつもので少し心が落ち着いた。満点解法を実装して提出。(13:10, 合計100点)
一旦A問題をやろうかと思って見てみると、ぱっと見わからなくて結構ビビる、最大値の最小化なので二分探索か?とか血迷って言い始めたけど、冷静さをなんとか取り戻して全然そうじゃないことに気づき、満点解法を実装して提出したが、一回実装ミスをして満点が取れず、A問題にして2回もビビる羽目に。実装ミスに気づいて直して提出。(13:30, 合計200点)
次にDを読んでみると、完全マッチングの判定をすることを要求されていることがわかり、一旦Dに粘着する気分になる。絶対Hallの定理だなと思いつつも、一旦興味本位で適当に書いた嘘貪欲を投げてみると落ちた。それはそう。Hall条件を書き出して一旦そのままをコードに起こして50点を獲得。(時間不明, 合計250点)
絶対その先の小課題や満点解法へのキーは掴んでいるはずなので、このまま粘着してより高い点数を狙おうとして、少し考察して条件を整理すると一個次の8点課題が定数倍が厳しそうだがMo's algorithm + lazy seg treeでできるかなと思い、かなり時間をかけて実装するもTLEだったので、かなり参った。(15:00くらい)
流石にちょっとまずいと思って、定数倍高速化を試みるかと思いコードと睨めっこするが、全然ダメで結局一旦撤退する。(15:30)
急いで小課題だけ回収しようと思い、パッと見えたCの24点コードを提出。(時間不明, 合計274点)
かなり焦っていて、Cの続きが全然見えなくて、一旦Eに移るとなんかとりあえずいつもので16点が取れそうなので、コードを書いて提出。(時間不明, 合計290点)
Eの続きも見えず、やっぱりDに粘着しようと思い、定数倍高速化でやり損ねた、std::set→64分木とlazy seg tree→starry sky treeの書き換えをやり損ねていたことに気づいて、大急ぎで両方書いてみるんだけど、ダメだった。もう終了間際で、あまりできることがなかったので、一旦Mo's + lazy seg treeを捨てるつもりになって考察を巻き戻して終了後にでも解法を理解するつもりになって考察を始めたところで終了。

終わった後、自分が取った部分点から考えて290点だと結構怪しい気がしていて、春合宿落ちたかもしれんと思って本当に怖かったが、Cyanmondに通りそうと言われたのできっと大丈夫だろうと信じ始める。お祈り。

終了後Dをかなり考えても、Mo's + lazy seg treeよりまともな計算量の解法が全然生えなくて、だけど満点を取った人たちと同じ条件を考えているので方針は間違ってないらしくて困った.... 典型練習不足。結局Dは理解したが、50点止まりだったのが本当に情けなかった。Cも後でしばらく考えてみるとともういくつかの小課題が見えて、本当にDの8点課題でMo's + lazy seg treeをしようとしていたのが時間の無駄だったなと感じた。反省。

一つ思うことがあるとすれば、本選競技中に4回もトイレに駆け込んでいて、本当に何?みたいな気持ちだった。

2/5

去年に倣えばこの日の午前中に成績優秀者発表があるので、朝からかなりそわそわしていた。
学校に行って、1限が始まろうとしていた時TwitterでtatyamさんがJOIボーダーが載ってるリンクを貼っていて、見てみるとJOI春合宿通ってるぽくてよかった。本当によかった。

総評

もちろん春合宿通れたのは嬉しかったが、本選競技はやり残したことがいっぱいあるように感じられて、悔しい。
しっかり精進して春合宿では成功したい。
今年はzhoukangyangがIOIに来るらしいので、なかなかに厳しいが今年IOI日本代表になりたいものだ。