2023/12/23に開催された、ユニークビジョンプログラミングコンテスト2023 クリスマス(AtCoder Beginner Contest 334)に参加しました。
先週は、所用のためコンテスト不参加だったので、2週間ぶりの参加。年内にRatedで出られるコンテストは、これきりということで、年内再入水は絶望的ですが、来年に向けて良い成績が残せるように頑張るのみです。
2週間ぶりの参加。年内の再入水は厳しそうだが、とにかくレートを上げられるように頑張るのみです。
— devgenjin77 (@devgenjin77) 2023年12月23日
ユニークビジョンプログラミングコンテスト2023 クリスマス (AtCoder Beginner Contest 334) - AtCoder https://t.co/gAMakBWFY2
今回の結果
ACDEの4完で終了。超久しぶりにB問題を落としてしまいました。
それでも、なんとか水パフォ確保という結果で、レートは上昇。なんとか今年最後のコンテストを勝ちで終えることができましたとさ。
B問題を落としたが、なんとか水パフォ確保で勝ち😅
— devgenjin77 (@devgenjin77) 2023年12月23日
devgenjin77さんのユニークビジョンプログラミングコンテスト2023 クリスマス (AtCoder Beginner Contest 334)での成績:1620位
パフォーマンス:1262相当
レーティング:1151→1162 (+11) :)#AtCoder #ABC334https://t.co/qhgZYBGMfx
振り返り
B問題でやらかしてしまいましたが、なんとかリカバリできたという印象です。
A問題
の場合Bat
、それ以外は、Glove
を出力するだけ。
実装後、テストもそこそこに提出してAC。51秒で1完です。
提出コード
https://atcoder.jp/contests/abc334/submissions/48733223
B問題
見るからに、ややこしそうな問題という印象。
とりあえず、基点をにしておいたらシンプルになるかということで、とぞれぞれからを引いて補正してみる。
あとは、、を、それぞれで割った整数部を足した後、原点を跨ぐ場合は足してみるという感じでOKか思い、提出してみたら、これがWA。。
どっかのコーナーケースに引っかかっているのかという感じだが、すぐには原因が分からない感じ。
IF文でゴリ押せばなんとか通りそうだが、もう時間が30分経過していることと、順位表を見てると通常B問題よりは躓いている人が多い印象ということから、これ以上B問題にとりかかるのはリスクが高いのではという判断で、一旦スキップすることにしました。
C問題
これもC問題にしては、やたら難しそうな問題という印象だが、B問題をスキップしている手前、なんとか解かないといけない。
以下考察。
残っている靴下で計算した「奇妙さ」の総和と、なくした靴下で計算した「奇妙さ」の総和は、おそらく一緒になるので、なくした靴下で「奇妙さ」を計算すればよい。
が偶数の場合、なくした靴下の色でソートしてから、隣接するペアで「奇妙さ」を計算していくのが最善かと。
が奇数の場合どうするか。の場合は、「奇妙さ」をにできるが、そうでない場合、どの靴下を捨てるかを全探索しないといけない感じ。
結局、靴下の色でソートしてから、先頭から隣接するペアを見た時の「奇妙さ」の累積和、および、末尾から隣接するペアを見た時の「奇妙さ」の累積和を前計算し、作成するペアの数をで固定した時に、「奇妙さ」の合計が最小になる組を選べばOKかと。
ちょっと、これがC問題で求められる解法かよという印象だが、なんとか実装して提出したらACが取れましたとさ。
54分50秒で2完。大分立ち遅れてますが、なんとか1完で大爆死は免れたという感じです。
提出コード
https://atcoder.jp/contests/abc334/submissions/48778438
D問題
順位表上からみても、そんなに難しくはないという印象の問題。
とりあえず、をソートしてから累積和を作り、台のソリを引くために必要な最小のトナカイの数を前計算する。
あとは、各クエリので何台のソリが引けるかを、先ほど計算したを二分探索することで求めればOKかと。
ということで、あとは実装して問題なくAC。64分0秒で3完です。
提出コード
https://atcoder.jp/contests/abc334/submissions/48782912
E問題
連結ということで、Union-Findを使って解くべきかという印象。
とりあえず、初期状態のより、隣接する#
のマスを連結させることで、連結成分の数を前計算。
次に、上の、各.
のマスを見ていき、そこに隣接する#
がどの連結成分に属するかを、Union-Findのleader()関数を使って見ていく。
すると、連結成分の種類が0なら、連結成分数が1増える。1なら、0増える。2なら1減るという要領で、.
を#
にしたときの緑の連結成分数が計算可能。あとは、普通に期待値を計算すればOK。
実装も、なんとか時間内に間に合ってAC。94分54秒で4完です。
提出コード
https://atcoder.jp/contests/abc334/submissions/48795569
F問題
なんとか目を通したものの、なにもわからずで終了。
G問題
問題すら見ておりません。
これまでの実績
今年最後のコンテストをなんとか勝ちで終えました。
総括
今回、Bが解けなかったのは大きな反省材料。これも日々の精進が足りないのが原因でしょうなあ。
これで、2023年のコンテストも終了。今年は、目標であった入水をなんとか達成できましたが、レートの方はというと、行ってこいという感じで、大した上昇にはなりませんでした。
来年は、まず再入水して、水色で安定させることが目標。その先に入青まで目指せればという所でやっていきたいです。しかしながら、今年のレートの推移をみると、もうちょっと、精進のやり方を見直していかないと、これ以上の成長は無いかという感じなので、精進のやり方を見直すのが先決だなあという感じです。
ということで、また来年も頑張ります。