JOIG2023 春季トレーニング 参加記

JOIG 2022/2023の春季トレーニングに参加しました。

問題のネタバレありです。

 

~Day -1

 

直近1年の精進はこんな感じ。↓

Heatmap

気が向いた時にABCに出ていた。特に最近はほとんどパソコンに触れられておらず春合宿に参加するかどうかもかなり悩んだが、色々な人と交流できる機会だと思って参加することにした。

3月に無駄に忙しいスケジュールを組んでしまい、春合宿開始前から既に体力的に限界。腕慣らしのために久々に出たABCでは3完という素晴らしい成績()を残した。

 

Day0(表彰式&交流会)

駅さえ間違えなければ大丈夫だと思っていたらその後思いっきり迷った。安田講堂は東大生でもなかなか入れない場所らしく、貴重な体験をさせて貰った。

 

その後の交流会では沢山の人と話すことができた!……と書きたいところではあるが、ああいう場で自分から話しかけに行くのがあまり得意ではなく、話しているんだかぼけーっと突っ立っているんだかよく分からないまま終わってしまった。コミュ力欲しい。

 

夜はいい加減精進しないとな〜と思いながら、期限の迫った課題をやっていた。

 

Day1(プラクティス)

去年の春合宿やJOI本選のプラクティスは割とサクサク捌ける感じだったのでそういう感じを予想していたら、普通にしっかりした問題でびっくり。問題数も多かった。

 

Addition

足すだけ!…のはずなのにTLE。cin/coutじゃダメやつだった。cin/coutの高速化は当日の朝に詰め込もうと思っていたので確認できてよかった。

来年がどうかは知らないが、今年の競技では実装上の注意に高速化のおまじないが書いてあった。感謝。

Airlines

解説を聞いて、そんなものもありましたね……という気持ちになった。

Stone Arranging2

JOI本選で解いたので飛ばす。

Ramen(Communication)

どこかで見覚えがある。部分点だけとって次へ。

Transmission(Communication)

今思えば4日目の問題にちょっと似ている気がする。

Santa Claus(Output Only)

ラクティスでは毎回Output Onlyが出ている割にJOIGの競技では一回も出たことがない。いつか出るんでしょうか……。

 

午後はEGOI2022の報告会とヒューリスティック問題のチーム戦。

問題はこれ↓

atcoder.jp

チーム戦とは名ばかりのほぼ個人プレイ。周りが易々と4桁の得点を出していく中、私は散々バグらせた挙句3桁までしか取れず。

同時に解いていたチューターの方々があっという間に高得点を叩き出していてすごかった。その後の解説もわかりやすくて、なんとなくヒューリスティックの雰囲気が掴めた気分になった。

 

夜は、精進した方がいいんだろうな〜と思いつつ、体力が限界だったので本を読んだりYouTubeを眺めていたりした。今思えば意外と悪くない選択だったのかも。

 

Day2(競技1)

ついに競技。

開始直前までマスコットをいじっていた。緊張しないで済むので他人の目が気にならなければ結構おすすめ。

 

去年の上位陣を眺めていて、なんだかんだ満点を狙った方がいいことが分かったので最低1完を死守することを目標に。JOIG本選では4位(得点分布からわかる情報)だったこともあり、それなりにいい順位が狙えそうと思っていた。問題が難易度順に並んでいるため、1問目から順番に解いていった。

 
Rochet Launching

小課題の制約が非常に意図的。個人的にとてもJOIらしい問題だと思う。小課題1から順に解いていったり図を書いたりしているうちに満点。ここまでで1時間強。

Teleporter

ゲーム系の問題は苦手なので小課題1しか取れないまま次へ。周りに差をつけられたのはこの問題。

Council

情報をビット列で持てば良いことまで辿り着いたものの、関数の名前をど忘れ。しばらくリファレンスを眺めても見つからなかったので途中で諦める。

この時思い出せなかったpopcount()はc++20からでしか使えず競技で使われていたのはc++17だったので、実は思い出せてもあまり意味がなかった。

Belt Conveyor(Communication)

問題文をよく読んでおらず、パスグラフという制約を勝手に加えたまま考察を進める。途中で入次数が3以上になり得ることに気づき、何もできないまま競技終了。

 

後半2問がJOIとの共通問題。

 

100 + 13 + 40 + 5 = 158

 

全体の感触は割といい感じ。取れる部分点はしっかりとったし、バグがとれないまま終わった問題もなかった。今の私にできる最良のムーブだったと思う。

 

昼食を食べていたら順位表が配られた。いつからそんなシステムになったんですか。

結果は8位。4~7位がかなり接戦でそこからさらに50点近く離された状態。周りのレベルがどんどん上がっていてすごいと思った。

 

夜は、もう精進してもしょうがないしな〜と思って呪術廻戦を読んだりハイキューを見たりしていた。

 

Day3(講義&交流)

午前中はかつっぱさんによる講義。精進の方法についてと(平衡)二分探索木の実装。

競技の解説を聞いていても思うけど、競プロ界隈の方々、説明やスライド作りがうまくて憧れます。

 

実装を始める前に紙の上でしっかり考察をすることを強調されていた。これは私も直近1年くらいで意識していたことだったのでなんとなく嬉しかった。

 

二分探索木の説明まで聞いた時点で頭が爆発しそうだったので実装に入った。周りを見ると平衡二分探索木の説明まで聞いて、実装もできている人が結構多そうだったのですごいなーと思った。技術がないくせに背伸びしてポインタで実装しようとしたところ当たり前のようにバグり散らかしたので、配列を使って実装し直そうとしたが時間切れ。プログラミングの基本をもっとちゃんと勉強したい。

 

IIJの方がいらしていて30分程度お話を伺った。お昼ご飯もIIJ持ちで、いつもよりちょっと豪華なお昼をいただいた。

 

午後はまったり交流会。競プロには全く関係のないゲーム(人狼など)で遊んだ。この交流会で全体的に仲良くなれた気がするので良かった。個人的には1日目にこっちの方がありがたかったかも……。

 

夜は、久しぶりにプロセカをやった。楽しかった。

 

Day4(競技2)

1回目の競技結果的に代表を狙っても仕方なさそうだったので、順位は気にせずに全力を出すことを目標にする。割り切ってしまえば全く緊張しなかった。あと、この日がたまたま好きな曲の配信開始日だったので朝から聴きまくった。そんなこんなでメンタル最強状態で競技に臨んだ。

 
Smartphone

問題文を読み終わった瞬間「区間スケジューリング問題」というワードが頭をよぎる。そのまま問題を眺めていると満点解法らしきものが降ってきたので考察もそこそこに実装開始。デバッグを頑張ると満点がとれた。ここまでで1時間弱。

この問題がサクッと解けたのがかなりアドバンテージになった気がする。

White Light

問題の内容と制約に加えて、JOIG春にまだDPが出ていなかったことからDPを確信。O(NK)のDPで小課題3までを通す。小課題4を取るにはKのループを無くせばいいことまでは分かったがやり方が思いつかず、諦めて次へ。

スライド最小値という典型問題だったらしい。知らなかった。また、それにたどり着けずともセグ木で殴ることもできたらしい。いい加減セグ木を実戦で使えるようになりたい。

Bitaro's travel

Q=1の場合は二分探索でどうにかできそうだったのでどうにかした。小課題3の制約が何かあるんだろうなと思いつつ使い道が分からなかった。

The Last Battle(Communication)

これが私にとって最後の情オリの競技になると思っていたので、問題名を見て少し感慨深くなる。時間をかけて考えれば点数を伸ばせそうな問題でかなり好みだった。

N=4は区画ごとに多数決を取る方針で簡単に実装できそうだったので通す。工夫すれば同じ方針でN=16もいけそうだと思ったので実装にかかったが、途中で考察ミスに気付いた。

解説の時に焼きなまし法というワードが出てきて驚いた。ヒューリスティック以外にも使いどころあったんですね。

 

2日目の競技よりもとっつきやすい問題が多いように感じたが、それを言った相手全員に否定された。私の感覚おかしいんですかね……。

 

この日のムーブもかなり最善に近かったと思う。今まで精進量の少なさゆえに典型問題への苦手意識があったが、最後の最後で典型の知識に救われた。

 

100 + 62 + 24 + 23 = 209

競技1と合わせると、158 + 209 = 367

 

昼食を食べた後はその辺をふらふらしていた。順位表が配られたとの噂を聞いたので向かうと、私の分の紙は既にその場から消えていた。どうして……。

仕方ないので他の人の紙を覗き見ると、競技2で3位、総合でも3位だった。びっくり。驚きすぎて変なリアクションをとってしまった。

色々な人の「結果は最終日まで分からない」的なツイートを自分で実証することになろうとは夢にも思わなかった。

 

ちなみに2位とは150点近く差があった。上位2人が強すぎ。

 

2日目の勝因(当社比)を適当に考察しておくと大体

  • 問題と相性が良かった
  • メンタル最強状態で頭が冴えていた
  • 1日目の競技でコツらしきものを掴んだ
  • 場数を踏んで5時間競技に慣れてきた
  • 最近受験数学をちょっと真面目にやっていた

みたいな感じ。

 

特にメンタル面に関しては自分が体力オバケではないことを自覚していて、毎日帰宅後は無理に精進したりせずに心を無にして各種コンテンツを消費していたことが結果的に私にとっては良かったのだと思う。ただの怠慢とも言えるが。

問題慣れに関しても、本当はバチャ等で慣れておくのが理想。

 

まとめ

EGOI2023の代表をさせて頂けることになりました。

現地開催でのEGOIが今からとても楽しみです。頑張ります。