MtSakaのブログ

競技プログラミングをします

JOI2022/2023本選参加記

2023/2/5,12に開催されたJOI 2022/2023本選に参加しました。その参加記です。

2/11以前

今年は2/11,12が土日となっており、おそらく2/11が数学オリンピック本選の日なので配慮されて2/5に開会式/交流会となった。自分は様々な要因によりJOI初参加だったため正直よくわからない。

毎年恒例(自分は初参加だけど)の自己紹介動画は同学年の競プロerで新年会という名目でカラオケ/謎解きをした時に撮影した。自己紹介動画の内容はロシアンタコ焼き(一つだけ激辛タコ焼きがある)にした。カラオケで偶然そのメニューを見つけ、しかもその個数が人数と一致していたのでこれをやろうとみんなで話し合った。(もともと自己紹介動画みんなで撮影しよう~みたいな話にはなっていたがこんなにドンピシャでいいネタがあるとは思わなかった)
かなり楽しかったし面白かった

実際の競技については春合宿にとりあえず進出することを目標にしていた。難易度9以下を確実に取れれば本選突破は確実だろうと思ったので難易度8,9をちゃんと取れるように8,9を中心に埋めていった。10とか11とか12にも多少手を出したりした。IOIシラバスをちゃんと一通り読んだりした(してる人ほぼいなそうだけどしておくとよいと思います)。あとは難易度8,9レベルの問題を探しにoj.uzで海外OIの問題を漁ったりした。

本選までのJOI精進状況

2/4にtatyamさん主催によるJOI本選バチャがあった。そこまで多くの人は出ていなかったけどそれなりに満足のいく結果が出せたので少し安心した。

2/5 開会式/交流会

自己紹介動画は時間制限によりいきなりしおむすびがタコ焼きを食べ始めるという謎動画を提出したため、タコ焼きのツイートをしてそれをJOI鯖に貼って人々に理解してもらおうとした。
結果的に結構盛り上がり、辛いふりをした人などがいたため誰が当たったのかコメントしてくれてる人とかいて嬉しかった。
個人的にはCyanmond(cv.ずんだもん)による「全完宣言なのだ」が一番好きだった。

ツイート
結果発表

E8さんらによるチューター企画/交流会が夜にあって、とりあえず参加することにした。4人くらいのチームに参加者が振り分けられて問題を解くようなものだった。問題はヒューリスティックな感じの問題だった。色々うまくいって前半後半でともに一位を取って総合一位だった。チームメイトに感謝。
開会式から一週間はとにかく問題を解いたりした。それ以外逆に何をやればいいかわからない。

2/11

運よくJMO本選に進出したので午前は数オリの勉強をして13:00からの本選に向けて調整していた。数オリの方は(2/13現在では)結果が出ていないのでちょっと待ち遠しい。
数オリ後は同じ学校の数研の人々15人くらいでサイゼリヤに押しかけて夜ご飯を食べた。結構遅くまで居座ってしまい21:00からのABCに間に合うか微妙な時間で解散して急いで帰宅した。
結果的にABCに間に合い7完の58位と調子がそれなりに良かった。Gで直前の学校の受験休み中に勉強したCHTが出たにもかかわらずMonotone Minimaで解いて、ちょっと怖かったけど。
ABC後は数オリから切り替えようと思ってたところを、一緒に通話する人が見つかったのでその人ともう一人といざという時に使えそうなNyaan's Libraryの高度データ構造/アルゴリズムの使い方を習得した。最終的には使わなかったけど...

2/12

前日にABC後の通話で寝たのが2:00だったがなぜか8:30頃に起きた。(少し眠かった)
去年までは9:00開始だったが去年寝坊しそうだった人が発生したことからか13:00からと優しい時間になった。
起きてすぐはあんま実感はわかなかったが本選当日であることを自覚しはじめて緊張してきたのでアニメを見たりして時間を浪費した。
12:00ごろになってさすがに調整するかと思い、去年の本選のA,Bを解きなおすことにした。解いたことあるとはいえ10分程度で解けていったん安心できた。
昼飯はカップ焼きそばを食べて、気づいたら12:45になっていた。チョコやお水などを用意して自分の周りの環境を整えて準備をして、競技に臨んだ。

競技パート

提出等からムーブをおおまかに
方針としては基本的に順当に前から見て満点取れるうちは全部取って取れなくなったら全部の問題を読んで部分点に行くという方針で動いた。
13:00 競技開始。直前にネットが少し不安定になったので心配だったが(競技中はずっと)問題なかった。
13:07 1問目を読むと、同じ色の区間を管理して問題文の通りにやると満点が簡単に取れると分かり実装してAC(合計:100点)
13:16 2問目を読むと、絶対値が45度回転しろと言ってくるのでその通りにやるといい条件になる。直近一週間で平面走査をする問題を複数解いていたおかげか何も考えずに実装する。なぜかバグが発生せず一発でAC(合計:200点)
13:20 3問目を読むと、苦手意識のあるグリッド問題なのでいったん問題文を読んで解法が思い浮かばないか考えるが普通に見当がつかなかったので他の問題も読む。
13:30 4,5問目の問題を理解したがとりあえず3問目で部分点取ろうと思い、自明な小課題1を取る(合計:208点)
13:54 少し考えるとO(RCN2)が生えて小課題2が解けたので頑張って実装する。とりあえず提出すると0点でちょっと慌てる。
14:05 ほどなくして少しだけ嘘を書いていたことが発覚して直して提出するとACが出て安心する(合計:227点)
14:07 なぜか通らない想定の小課題4が通るかも~と思い、最初に小課題2以外をはじくために入れていたif文を直して小課題4のテストケースも走らせるとなぜか通る(合計:246点)
14:14 その後小課題5も通るんじゃないかと思い何回か定数倍高速化したりして提出してみるもだめだった。たかが5点の小課題5に粘着するのは良くないと思い3問目をいったん放置することにした。
14:24 問題を読んだ時点で小課題1,2,3の解法は分かっていたので一気に実装してうまく実装出来たので提出すると小課題3でTLEが発生してびっくりしたが小課題1,2は通っていた(合計:260点)
14:28 少し頭を悩ませたがコードをにらむとデバッグ出力をしたままにしていたことに気づき、消して提出すると小課題3も通る(合計:267点)
14:30 3問目で区間に辺を貼るテクを思い出して3問目が解けるのではと思い3問目に移動
14:41 実装出来たので提出してみると点数があがらずショックを受ける。おそらくO(RCN2)がうまくいきすぎたのだろう。
14:50 すこし落胆していたが4問目の小課題5が思いつき、20点だったためとてもうれしい気持ちになる。
15:04 実装が終わり提出するがなぜかWAやREなどが出ており焦る。
15:06 しかし、実際は定数倍を早くした方がいいかなと使い慣れていないstd::setemplace_hintを使ったのが見事に未定義動作を踏んでいた(と思われた)のをすぐ察したためその部分を修正して提出すると小課題5が通る(合計:287点)
15:10 ここで脳が疲れていることに気づき、用意していたチョコと水を飲んでいったん整う。
15:15 ほかの問題で進む未来が見えなかったため5問目の考察をすることにする。
15:31 実験の結果RとBの個数に関するいい考察が生えて小課題1,2,3が通ることを確信して提出すると0点が返ってきて焦る
15:32 ちょっと見ると変数が逆になっているところがありなおして提出すると小課題1,2が通った。なぜ??になる(合計:302点)
15:34 このあたりで通過はできるだろうという気持ちが少し沸いてきたが小課題3をどうしても通したいと思ったのでその気持ちを振り払ってコードとにらめっこしたりちょっとコードを直して提出するが今度は0点....
15:40 問題文をちゃんと読もうという教訓を思い出し問題文をもう一度読み直すとあれ?クエリごとにリセットされますか?となる。実際そうすると小課題3が通るカスがよ(合計:312点)
15:50 4問目に戻ったらO(N2)の解法が生えたので実装する。そうするとぬるっと通って小課題4をAC(合計:322点)
16:00 4問目でO(N)っぽい解法が生えるが、頭が疲れ始めてきてチョコも食べきってしまい頭をリフレッシュできず、頭が少し混乱して正しかったのに嘘と判断して4問目を捨てる(バカ)
16:05 5問目の小課題4の解法が生えたと思い実装をはじめる(実際は嘘解法だった)
16:17 嘘であることに気が付き絶望。
16:27 3問目で定数倍高速化で安心のためにもう5点通したいと思い定数倍高速化を試行錯誤する
16:45 3問目に試行錯誤している間に5問目の小課題4の正しい解法が生えるが少し実装がある上、残り15分だったため急いで書き始める。
17:00 結果的に間に合わず17:00になった瞬間台パンした。
JOI鯖でなにか連絡があるまで何もしてはいけないと思い、ぼーっとしていたら終了の連絡が来て、Twitterに復活したり同学年のerの鯖でお互い振り返りなどをしはじめた。
自分は正直やらかしたなと思っていたなか周りもそれなりにやらかしたと発言しており少し安心する。
なんやかんやで春は安泰そうだとJOI鯖を見てもわかったので安堵した。

チューターによる解説を聴きながら3問目絶対解けないなーと思ったり、4問目正しかったやん!カス!と思ったり感情がめちゃくちゃになって疲労を一気に感じ始めた。
5問目の解説で途中で理解できなくなり悲しかったがかなり天才だなーと感じた。
解説の後Gartic Phoneが開催されることになりなんとなくで画面共有しながらやった。絵心が無いことを自ら晒してしまい、恥ずかしかった。
Gartic Phone中から頭が痛くなりはじめたのでAGCは参加せず寝ることにして結局寝た。

2/13

2/12に2/13の午前中に成績優秀者の発表がありますと言われていたので朝から少しそわそわしていた。
通過しているだろうとは思っていたがなんやかんやでやらかしていたらどうしようなど様々な憶測が自分の中を飛び交って緊張していた。
学校の授業もほぼ聞かずにウェブサイトを無限にリロードしていた。
11:00頃に発表があり、Aランクであることを確認して休み時間中だったのでうれしさのあまり叫んでしまった。
同級生のボーダー付近の友人に結果が出ていることを知らせ、彼が通っていることを確認して二人で喜び合った。

総評

もちろん春合宿に通過できたことはうれしいが、競技については4を通せたり5の部分点を取ったりできるべきだったところがあるので悔しい気持ちでいっぱい。
悔しさをぶつけて春合宿では一桁順位を目標に一か月間頑張ろうと思う。