ユニークビジョンプログラミングコンテスト2023 クリスマス(AtCoder Beginner Contest 334)参加記

2023/12/23に開催された、ユニークビジョンプログラミングコンテスト2023 クリスマス(AtCoder Beginner Contest 334)に参加しました。

atcoder.jp

先週は、所用のためコンテスト不参加だったので、2週間ぶりの参加。年内にRatedで出られるコンテストは、これきりということで、年内再入水は絶望的ですが、来年に向けて良い成績が残せるように頑張るのみです。

今回の結果

ACDEの4完で終了。超久しぶりにB問題を落としてしまいました。

ABC334順位表
ABC334順位表

それでも、なんとか水パフォ確保という結果で、レートは上昇。なんとか今年最後のコンテストを勝ちで終えることができましたとさ。

振り返り

B問題でやらかしてしまいましたが、なんとかリカバリできたという印象です。

ABC334提出結果
ABC334提出結果

A問題

A - Christmas Present

B \gt Gの場合Bat、それ以外は、Gloveを出力するだけ。

実装後、テストもそこそこに提出してAC。51秒で1完です。

提出コード

https://atcoder.jp/contests/abc334/submissions/48733223

B問題

B - Christmas Trees

見るからに、ややこしそうな問題という印象。

とりあえず、基点を0にしておいたらシンプルになるかということで、LRぞれぞれからAを引いて補正してみる。

あとは、LRを、それぞれMで割った整数部を足した後、原点を跨ぐ場合は1足してみるという感じでOKか思い、提出してみたら、これがWA。。

どっかのコーナーケースに引っかかっているのかという感じだが、すぐには原因が分からない感じ。

IF文でゴリ押せばなんとか通りそうだが、もう時間が30分経過していることと、順位表を見てると通常B問題よりは躓いている人が多い印象ということから、これ以上B問題にとりかかるのはリスクが高いのではという判断で、一旦スキップすることにしました。

C問題

C - Socks 2

これもC問題にしては、やたら難しそうな問題という印象だが、B問題をスキップしている手前、なんとか解かないといけない。

以下考察。

  • 残っている靴下で計算した「奇妙さ」の総和と、なくした靴下で計算した「奇妙さ」の総和は、おそらく一緒になるので、なくした靴下で「奇妙さ」を計算すればよい。

  • Kが偶数の場合、なくした靴下の色でソートしてから、隣接するペアで「奇妙さ」を計算していくのが最善かと。

  • Kが奇数の場合どうするか。K=1の場合は、「奇妙さ」を0にできるが、そうでない場合、どの靴下を捨てるかを全探索しないといけない感じ。

  • 結局、靴下の色でソートしてから、先頭から隣接するペアを見た時の「奇妙さ」の累積和、および、末尾から隣接するペアを見た時の「奇妙さ」の累積和を前計算し、作成するペアの数を \lfloor \frac{K}{2} \rfloorで固定した時に、「奇妙さ」の合計が最小になる組を選べばOKかと。

ちょっと、これがC問題で求められる解法かよという印象だが、なんとか実装して提出したらACが取れましたとさ。

54分50秒で2完。大分立ち遅れてますが、なんとか1完で大爆死は免れたという感じです。

提出コード

https://atcoder.jp/contests/abc334/submissions/48778438

D問題

D - Reindeer and Sleigh

順位表上からみても、そんなに難しくはないという印象の問題。

とりあえず、Rをソートしてから累積和を作り、 A \lbrack i \rbrack := i台のソリを引くために必要な最小のトナカイの数を前計算する。

あとは、各クエリのXで何台のソリが引けるかを、先ほど計算したAを二分探索することで求めればOKかと。

ということで、あとは実装して問題なくAC。64分0秒で3完です。

提出コード

https://atcoder.jp/contests/abc334/submissions/48782912

E問題

E - Christmas Color Grid 1

連結ということで、Union-Findを使って解くべきかという印象。

とりあえず、初期状態のSより、隣接する#のマスを連結させることで、連結成分の数を前計算。

次に、S上の、各.のマスを見ていき、そこに隣接する#がどの連結成分に属するかを、Union-Findのleader()関数を使って見ていく。

すると、連結成分の種類が0なら、連結成分数が1増える。1なら、0増える。2なら1減るという要領で、.#にしたときの緑の連結成分数が計算可能。あとは、普通に期待値を計算すればOK。

実装も、なんとか時間内に間に合ってAC。94分54秒で4完です。

提出コード

https://atcoder.jp/contests/abc334/submissions/48795569

F問題

F - Christmas Present 2

なんとか目を通したものの、なにもわからずで終了。

G問題

G - Christmas Color Grid 2

問題すら見ておりません。

これまでの実績

今年最後のコンテストをなんとか勝ちで終えました。

コンテスト実績
コンテスト実績

総括

今回、Bが解けなかったのは大きな反省材料。これも日々の精進が足りないのが原因でしょうなあ。

これで、2023年のコンテストも終了。今年は、目標であった入水をなんとか達成できましたが、レートの方はというと、行ってこいという感じで、大した上昇にはなりませんでした。

来年は、まず再入水して、水色で安定させることが目標。その先に入青まで目指せればという所でやっていきたいです。しかしながら、今年のレートの推移をみると、もうちょっと、精進のやり方を見直していかないと、これ以上の成長は無いかという感じなので、精進のやり方を見直すのが先決だなあという感じです。

ということで、また来年も頑張ります。