はじめに
こんにちは、青色コーダーのyu23578です。
JOI2025/2026のセミファイナルステージに参加したので、参加記を書こうと思います。
参加記を書くことになったきっかけ
そもそも私は参加記自体が嫌いです。どうせ勝ったときにしか書かないからです。
しかし、
・書くことを強く推奨された
・周りの人が書いていた
・今度受ける人の参考になるかもしれない(本当か?)
という理由で、書くことになりました。
背景知識
JOIは初参加で、いろいろと不安でした。ただ、初参加ということで「去年と違う」ことが一つも無かったことは良かった(?)気がします。
また、過去問の感触的に、
・二次予選は通りそうだが油断はできない
・本選は6割5分の確率で通りそう
という感じでした。
1次予選
1回目だけ参加しました。他人とのコミュニケーション(Communication Taskのことではない)が禁止とのことだったので、学校のトイレで参加しました。結果はもちろん通過。
水筒を持たずに参加してしまったので、すごく喉が渇きました。
2次予選
A 一問目にしては実装重い?
B 激ムズ。証明付きだったら難易度5どころじゃないと思います。
C これも実装が面倒くさい。
D 面積図を書けば見やすい
E 問題文の読解を頑張っていた。頂点倍加をすればいい。
F エスパー → 軽い証明 をして小課題1~4を通す。ボーダーが600はありえなさそうだったので勝ちを確信。小課題5は実装が重すぎたためコンテスト時間に間に合わず。重実装は嫌いです。
結果は570点。ボーダーは390点でした。思ったより低かった。
セミファイナルまでにやったこと
JOI精進
気づいたらセミファイナルの一週間前とかだったので、焦って埋めました。難易度9を4問ぐらい埋められた
作問
正直なところ、精進よりもこっちをやっていました。
4/24 ,4/27にコンテストを開催するので、お楽しみに!(宣伝)
セミファイナル 3日前
風邪っぽいものをひきました。セミファイナル本番も含めると、二番目に焦った瞬間です。インフルじゃなくてよかった
セミファイナル当日
当日の朝まで、新橋じゃなくて新宿が会場だと思っていました。危うくセミセミファイナル落ちをするところでした。
11:20 くらいまで、本選会場の近くをウロウロして作問のネタ探しをしていました。緊張がほぐれるのでおすすめです。
セミファイナルの会場が開くのは11:30からと聞いていたのですが、それより前から入ることが出来ました。受付でcinnamon_perfectさんと会いました。覚えてもらっていて嬉しかったです。
受付とパソコンのセッティングを終わらせて、複数の競プロerに話しかけました。話しかけた人には名前を知られていて安心。
韓国のりを持ってきている人がいました。後でhighlighterさんであることが発覚しました。
Nafmoさんにステッカーを貰いました。
1割の人間しか貰っていないそうなので、これで私も上位1割です。(いいえ)
ペットボトル飲料1本とお菓子2個を持って行ってもいいそうなので、お茶、アルフォート、カントリーマアムを取って本選に臨みます。
競技開始
A
問題文を読みます。実装します。AC (0:05:13)
B
問題文を読みます。難しいです。考察します。イベントソートです。AC (0:18:38)
C
問題文を読みます。1,2,4,8,16,32で1~63をつくるやつを思い起こさせるような問題文です。
貪欲を思いついたので、実装して投げます。なんと、サンプルすら通りません。流石にバグだろうと思い見直すと、Yesを出力し忘れていました。修正して提出し、WA(31点) (0:40:42)
小課題4から先が通せていません。実装ミスを疑いましたが、よくよく考えると先ほどの貪欲が嘘であることが発覚します。""このように、直感に頼った未証明のGreedyは危険です。""
ここから、何も思い浮かばない時間がしばらく続きます。これを通せないと本選落ちは確実そうだったので、少し焦ってきました。
ここで、1,2,4,8,16,32を思い出します。解の上界が自明に6個であることに気づき、急いで全探索を実装。焦りすぎて64bit整数でいいところをbitsetを用いて実装していました。少し実装で沼りましたが、何とかAC (1:18:33)
ここでかなり心の余裕が出来ました。あわよくばDも満点取れるかな、とかを考えていました(フラグ)
D
問題文を読み終わりましたが、小課題1がまったくもって分かりません。とりあえず小課題3,4を通します。(1:51:51)
ここで、川下りを逆から見て川上りの形にすることで、操作が一意に定まり、木dpができることに気が付き、実装します。
しかし、サンプルが合いません。そもそも私は木dpをあまり書いたことがないことに加え、長丁場での疲労もあってだらだらし始めます。
お菓子をもぐもぐしたり、水をごくごくしても現実は変わりません。気が付いたら残り1時間になっていました。作戦などは特に決めていませんでしたが、このままでは落ちそうだったのでほかの問題を見ます。
E
最小全域木が関わってきそうだと思ったのですが、Cで嘘貪欲を生やしたことを思い出し、さすがにこれも嘘だろうと思います。これは結果論ですが、最小全域木が関わるのは正しい考察でした。ツイてませんね。
とりあえず自明な小課題1を投げて通します。(3:17:44)
ここから15分くらい考えてみますが、何も見えません。とりあえずFに移ります。
F
問題文が長いです。しかも、自明な部分点が6点しか無さそうでした。Dの小課題1(13点)は思いついていたので、しばらく考えた後、Dを実装することにしました。
D
残り30分も残っていません。もし実装で沼れば終わりです。余っている力を注ぎこみ、ほぼノーミスでコードを書き終えることが出来ました。提出すると13点上がりました。(3:46:57)
F
残り13分で問題文を読み、実装をしてみますが、実装途中で競技が終了。
競技終了
最終的な得点は、100-100-100-31-5-0の336点でした。
同校erのうち1人と同点で、嬉しいのか嬉しくないのか良くわからなくなりました。
ここから暫定ボーダー発表までは、discordに流れてくる自分より点数が高い人を眺めながら、ただひたすらに焦っていました。
そしてついに、JOIの暫定ボーダーが発表されます。なんと324点で、暫定では通過したことが分かりました。とても安心しました。
家に帰るまで
会場のお菓子や水を取ってもいいとのことだったので、せんべいを6枚と水を3本取りました。Yoyoyoさんが水をがぶ飲みしているところを観察していました。
唯一後悔していることは、鉄則本を持っていかなかったことです。E8さんにサインを貰いたかった…
教訓
・すべての問題に目を通す!
・粘るのはほどほどに!
・嘘だと思っても実装して投げる!
・最後まであきらめない!
最後に
今回、こんなにいい成績を収めることが出来るとは思ってもいませんでした。
一応、まだ春合宿が確定しているわけではないので、2/15を待とうと思います。
それでは、(もし通ったら)春合宿編で会いましょう。
最後まで読んでいただき、ありがとうございました。