パナソニックグループ プログラミングコンテスト2023(AtCoder Beginner Contest 326)参加記

2023/10/28に開催された、パナソニックグループ プログラミングコンテスト2023(AtCoder Beginner Contest 326)に参加しました。

atcoder.jp

先週のABCで再度の入水を果たしたものの、現状ギリギリ水色コーダーという身分のため、なんとかレートを水色安全圏まで持っていきたいところ。

今回も水色パフォを取って、レートを上げていこうという感じで挑んでいきます。

今回の結果

終了3分前で、なんとかD問題を突破し、5完を確保することができました。

ABC326結果
ABC326結果

パフォーマンスの方は、水色の上の方まで出てくれて、なんとか直近のHighest付近までレートを戻すことができました。

振り返り

結構ミスが重なってしまい、反省点の多かった回でした。

ABC326提出結果
ABC326提出結果

A問題

A - 2UP3DOWN

シンプルに条件分岐を組めそうな感じもするが、ハマったりする可能性もあるので、X \lt Yの場合と、X \gt Yの場合とで愚直に場合分けすることにしました。

少し実装に時間がかかったものの、問題なくAC。2分51秒で1完。

提出コード

https://atcoder.jp/contests/abc326/submissions/46994139

B問題

B - 326-like Numbers

Nからスタートして、326-like numberが見つかるまで1づつインクリメントしながら試していけば良い。

これは、やるだけの実装でACが取れました。5分6秒で2完。

提出コード

https://atcoder.jp/contests/abc326/submissions/46998662

C問題

C - Peak

実数xを、数列Aのすべての値について試してみて、実際に獲得できたプレゼントが一番多かったものを採用する方針で良いはず。

で、ここで当初取れる範囲を、x + M - 1で二分探索して、同値のものが見つかった場合プラス1補正するという実装をしたので、初回提出ではWAを喰らってしまいました。。

じゃあ、同じ値が見つかるまでプラス方向に補正し続けるのはどうかと試してみたら、TLEを喰らってしまう始末。

結局、普通に半開区間として、x + Mを二分探索すれば、実装もシンプルだったというオチでした。

17分57秒2ペナで3完。ややこしく考えてしまい、変なとこでつまづいてしまいました。

提出コード

https://atcoder.jp/contests/abc326/submissions/47012495

D問題

D - ABC Puzzle

問題を一読した感じ、どうも実装の重い全探索系の問題のような気がする。

C問題を通した時点で順位表を見たところ、少しばかりE問題の方がAC数が多いようで、D問題でハマるリスクを考えれば、先にE問題を見てみた方が良いかという感じがしました。

ということで、一旦D問題をスキップすることに。


で、E問題を通したので、D問題に取り組むことに。

とりあえず、全行について、順列全探索的なことができるかと実装してみましたが、これはTLE。。

ということは、ある程度枝刈りしていくとなんとか解ける感じになるかなということで、列で同じ文字が2回以上出るケースをスキップするようにしました。が、、なぜかこれはWA。。

多分、どこかバグってるんだろうと思いながら色々調べているうちに、時間切れ間際まで追い込まれてしまいましたが、なんとか文字の重複チェックでバグっている箇所を突き止めて終了3分前にACを取り切ることができましたとさ。

97分21秒5ペナで5完。内容はボロボロでしたが、なんとか5完確保できてよかったです。

提出コード

https://atcoder.jp/contests/abc326/submissions/47041680

E問題

E - Revenge of "The Salary of AtCoder Inc."

まさしく、期待値DPのような形をした問題という印象でした。

具体的には、dp \lbrack i \rbrack :=変数x = iの時にダイスを振って追加でもらえる給料の期待値と定義し、i = Nから始めてi = 0に向かってデクリメントしながら計算していけば、最後dp \lbrack 0 \rbrackに答えが入るという感じになるかと。

dp\lbrack i \rbrackの具体的な値は、j \gt iとなるA_jの合計と、dp \lbrack j \rbrackの合計をNで割れば計算できるかなという感じで実装したら、一応サンプルが通ったので提出。なんと一発でACを取り切ることができましたとさ。

この時点では、39分1秒2ペナで4完。とりあえず大負けはなさそうな感じになったので、じっくりとD問題に取り組むこととしました。

提出コード

https://atcoder.jp/contests/abc326/submissions/47024777

F問題

F - Robot Rotation

残り時間がなかったので、コンテスト終了後に問題を覗いてみました。

考察してみると、偶数回目の移動がx方向に、奇数回目の移動がy方向に限定されるので、xyそれぞれ独立に考えることができるという感じ。

また、プラマイを調整して最終目的地まで辿り着けるかを、半分全列挙でできるかという感じでしたが、最終的にプラマイを答えに反映するのが難しそうなので、時間が余っててもできなそうという印象でした。

これは、今後に向けて復習しておきます。

G問題

G - Unlock Achievement

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

これまでの実績

なんとか水色をキープしました。今後1300位まで上げていきたいところ。

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

総括

順位的には良い結果が出ましたが、C問題のミスや、D問題でのバグらせなどの反省点もありました。

今後、入青を目指して6完できるぐらいの実力になるためには、この辺の課題も乗り越えていかないといけない感じかと。今回の復習をきっちりとこなして、次回に向けて準備していこうと思います。

ということで、また次回も頑張ります。