みろくの精進日記

競プロに関することを主につづります

JOI2023/2024 2次予選参加記

皆様初めまして。みろくと申します。
もうすぐ本選の時期になってしまいましたが、プライベートが落ち着いてきたので、今更ながらJOI2023/2024の2次予選に参加した時のことについて書いていこうと思います。
問題についての説明はしないので、過去問ページを見ながら読むことを推奨します。

atcoder.jp

JOI2023/20242次予選問題の解法のネタバレを含みます!解いていない方はご注意ください!

1.結果

早速ですが、結果を述べてしまいます。
合計223点で、ボーダーラインの240点に17点届かず、予選Bランクとなりました。
ということで各問題について考えていたことや、思考の順序などに触れた後、反省などについて述べていこうと思います。

2.各問題の振り返り

A - カードゲーム 2 (Card Game 2)

最初は、隣り合う3要素がx,x+3,x+6になっているか順番に見ていくというコードを書いていたんですが、入力例4を実行して、間に違う要素が入るパターンがある!と気づき、急いでset/mapを使う解法に書き直してACしました。

B - 買い物 2 (Shopping 2)

今回一番多くの時間を使った問題です。 問題文を少し読んで、累積和だ!となりました。
しかしセール情報を取り入れるのにとても苦戦した末に、種類ごとの累積和とそれのどこまでがセールなのかを二分探索で探す、という方法をなんとか思いつき、実装したのですが、入力例が通らない。
二分探索の境界や、オーバーフローなど、何度も何度も修正を重ね、何とかACできました。

C - 白色光 2 (White Light 2)

今回の一番の反省点です。
問題を一目見て、DPっぽい?と思いました。
しかしこの時の私はナップサックDPを学び始めたぐらいの身。全く遷移も方針も思いつかず、小課題を解こう、と思いました。
そして小課題1,4,5は3の倍数まで消した後、埋めるだけだ!と思い、これらを通しました。
そして、最初のDPっぽさや、解法を全く思いつかない、という第一印象にとらわれ、消す範囲を全探索するだけの小課題2を見落としていたのです...

D - 庭園 2 (Garden 2)

Cを通せておらず、すでにこの時「とりあえず問題をすべて見よう」という気持ちだったので、問題を見て、ほぼ理解が出来ず、出力例を見て、小課題1だけ解こう、と思いました。
その結果小課題1の条件では(x,y) = (2,2)以外ではr=1にできない、と気づけず、すべてのマスからr=1にして全探索をしていたので通せず、0点でした。

E - 高速道路の通行料金 (Highway Tolls)

Dと同じく、すでに小課題の最初のほうを取ろう、と思っていたので、小課題1だけを見てダイクストラ法だ!と思い、手元の書籍からダイクストラ法を丸写ししたらサンプルすら通らず、慣れないアルゴリズムであるこれを詰めるよりCやDの小課題を考えるべきだ、と思い放置したため、0点でした。

3.反省

コンテスト中の反省

まず、コンテスト中の反省としては次の2つです。
1. 問題文をよく読まなかったこと
2. 小課題を解くため新しい解法を考える頭に切り替えられなかったこと

「問題文をよく読まなかったこと」については、主にA問題、D問題についてで、 しっかり問題文を読んでいればA問題で順番に見ていくだけでは通らないことも、D問題で中央だけ見ればいいことも気づけたはずでした。
一目見て楽そうでも、きっちり問題文を読むこと、そして逆に一目見て面倒そうでもちゃんと問題文を読もうとすることが大切だと思い知らされました。
「小課題を解くため新しい解法を考える頭に切り替えられなかったこと 」については完全にC問題です。一目見た時のDPっぽさ、そしてこれは解けなそうという感覚に囚われて、ただ消す範囲を全探索して、かかる金額を順番に計算するだけ、という小課題の解法を思いつくことが出来ませんでした。これを通せていれば本選出場できていた、と考えるといまだに引きずるほど悔しいです...
また、この小課題を通せなかった理由としてもう一つ、B問題が私にとってとても難しいと感じていたため、それを通せたことでもうかなりボーダーラインに近づけているんだろう、という油断が生じて必死さがB問題を考えていた時より欠けていたこともあると思います。

コンテスト前、精進についての反省

こちらは一つに絞りました。それは、
- バチャが足りなかった
これです。
精進が足りない、なんていうのは当たり前なのでそこからさらに踏み込んで考えた結果これにたどり着きました。
普段のAtcoderなどのコンテストのための精進をしても、難しい問題を簡単な制約で解くという小課題への取り組み方や、早解きではなく1点でも多くの得点を取りに行く、というJOIのための精進はできなかったのです。
実際ボーダーラインのB問題が解けているわけなので問題をACする能力は不足していなかったと思います。ということで、JOIで得点を取るために、バチャをしなかったことが今回の結果を招いたと考えます。

一つだけ言い訳をすると、今回の2次予選の1週間前まで、学校で定期テストだったんですよね...まあ相手も同年代なわけで条件は似たようなものだと思うんですが、そういうところはあったかもしれないです。ただテストがあるからと言ってずっと勉強していたわけではないので結局私の精進が足りなかったことに変わりはないですが...

4.まとめ

長々と書いてしまい申し訳ありません。
この記事を読んでいただいている高2以下の方には、是非、JOIに参加していただきたいです!私は今回が最初で最後の出場だったので、もう1年早く参加していたら...と思っています。出場料が必要なわけでもないですし、エントリーしてから勉強する時間もたっぷりある大会ですので、積極的に参加していただきたいと思います!
そして参加する際は、JOIのための精進をすることをお勧めします。受からなかった人の意見なのでほどほどに聞いてほしいですが、落ちた人間だからこそわかる部分もあると思います。せっかくここまで読んでいただけたのですから、これだけは覚えていただけると嬉しいです!

たくさんバチャをしましょう!!!

長くなってしまいましたがここまで読んでくださりありがとうございました!
私はパソコン甲子園で絶対に競プロ全国大会出場リベンジします!