キーエンスプログラミングコンテスト2023秋(AtCoder Beginner Contest 325)参加記

2023/10/21に開催された、キーエンスプログラミングコンテスト2023秋(AtCoder Beginner Contest 325)に参加しました。

atcoder.jp

今週は長期AHCの開催期間だったので、アルゴリズムの精進は程々にAHCの考察と実装に取り組んでいたのですが、ABCにはきちんと参加することに。

とりあえず、再入水に向けて、水パフォ目標で挑むこととしました。

今回の結果

なんとか、5完を確保しました。

ABC325結果
ABC325結果

久しぶりの3桁順位ということで、青パフォもあるかなという期待もありましたが、結果は少し及ばすで水パフォ。

それでも、レートは大幅に回復して、なんとかギリギリで再入水を果たすことが出来ました。

振り返り

Dで多少詰まったことを除けば、概ね良い内容でした。

ABC325提出結果
ABC325提出結果

A問題

A - Takahashi san

文字列Sの後ろにsanを付けるだけ。

今までやってきたA問題の中でも、最も簡単な部類に入る問題という感じだったので、テストもせずに投げました。51秒で1完。

提出コード

https://atcoder.jp/contests/abc325/submissions/46790739

B問題

B - World Meeting

世界標準時0時開始から1時間刻みに23時開始までの24パターンについて、それぞれ参加できる拠点の人数を足し合わせた合計の最大を答えれば良い。

これもやるだけの実装でACでした。5分58秒で2完です。

提出コード

https://atcoder.jp/contests/abc325/submissions/46797528

C問題

C - Sensors

見た目の感じ、Union-Findを使うやつかなあと思ったので、素直に連結をUnion-Findで管理する方針としました。

まずは、それぞれのマス目について、#のマスの上下左右斜めのマスが#だった場合、Union-Findで連結させる。

あとは#の連結成分が何個かが分かれば良い。#のマスについてUnion-Find上のleader関数の値をSetに格納して、最後にサイズを出力する実装としました。

こちらも問題なくAC。16分43秒で3完です。

提出コード

https://atcoder.jp/contests/abc325/submissions/46803592

D問題

D - Printing Machine

最初、区間スケジューリング問題の変形みたいな感じだと思ったので、とりあえず後ろから印字する方向で考えてみました。

考え方としては、印刷範囲から出るのが遅い順、次に印刷範囲に入るのが遅い順から優先して印字していけば良いだろうという感じ。

まず、印刷範囲から出る順の降順の優先度付きキューに全商品を入れておき、次に印刷範囲に入る順の降順の優先度付きキューを空で用意する。

次に後者のキューが空の場合、前者のキューの先頭の終了時刻と同じ終了時刻の商品を後者のキューに入れる。

最後に、後者のキューの先頭から見て、前回印字した時刻より前の時刻で印字可能であれば可能な限り最大の時刻で印字する。出来ない場合はキューから捨てる。

この要領で、前者のキューが空になるまで処理を行い、最終的に印字できた商品数を出力すればOKという感じです。

考察と実装にやたら時間が取られましたが、なんとかACを確保。63分36秒で4完です。

提出コード

https://atcoder.jp/contests/abc325/submissions/46820361

E問題

E - Our clients, please wait a moment

車から電車に乗り換えるのが1回だけということで、都市1から各都市に車だけで移動した時の最短距離と、都市Nから各都市に電車だけで移動した時の最短距離をそれぞれダイクストラで求めておき、あとはどこで乗り換えるのかを全探索すれば良いかという感じの問題でした。

実装も問題なく完了し、なんとかACを確保。80分30秒で5完。

とりあえず、この時点で順位は800台あたりというところで、勝ちは確定したという状況でした。

提出コード

https://atcoder.jp/contests/abc325/submissions/46824850

F問題

F - Sensor Optimization Dilemma

20分弱という残り時間ながらも、とりあえず挑戦してみることに。

見た目上、とりあえず難し目のDPという感じ。制約から察するに、dp\lbrack i \rbrack \lbrack j \rbrack \lbrack k \rbrack := i個目の区間まで見て、センサー1がj個かつ、センサー2がk個の場合の最小コストというのを考えてみましたが、これだと全然計算量が抑えられてないということ気付いたところで時間切れとなりました。

G問題

G - offence

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

これまでの実績

2回目の再入水を果たしました。今度こそ、緑落ちしないようにしないと。。

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

総括

全体的に出来が良かった回でしたが、これでも水パフォが精一杯かという印象です。

今後、入青を目指していくためには、今回のようなセットで6完以上狙えるレベルまで実力を上げていきたいところ。引き続き、今回の復習を含め、精進を継続していきたいと思います。

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