AtCoder Beginner Contest 338参加記

2024/1/27に開催された、AtCoder Beginner Contest 338に参加しました。

atcoder.jp

先週、久々の5完を達成し、レートの方は、再入水寸前というところまで上げることができました。

この勢いで、まずは再入水を早く達成したいところ。今回も5完了目標で臨むことにします。

今回の結果

蓋を開けてみると、4完達成がやっとという結果でした。。

ABC338順位表
ABC338順位表

パフォーマンスは、水色にも届かずという感じで、結局今回は負け。再入水はお預けになりましたとさ。

振り返り

変な勘違いで、問題を余計に難しく考えてしまったところがあり、時間を浪費してしまった回でした。

ABC338提出結果
ABC338提出結果

A問題

A - Capitalized?

isUpperCaseisLowerCaseを使って、大文字小文字の判定をしていくだけの問題。

やるだけの実装をして提出。問題なくACが取れましたとさ。2分53秒で1完です。

もうちょっと簡単に実装するなら、正規表現を使ってみるとかですかね。

提出コード

https://atcoder.jp/contests/abc338/submissions/49694189

B問題

B - Frequency

サイズ26の配列を作成して、各文字の個数をカウントする。あとは、最大値を計算するだけ。

これも、ほとんどやるだけの実装。問題なくACが取れて、5分35秒で2完です。

提出コード

https://atcoder.jp/contests/abc338/submissions/49699070

C問題

C - Leftover Recipes

当初、Nの最大を10^{6}ぐらいかと誤解していたので、やたらと難しく考えてしまいましたが、よくよく確認してみると、Nの最大が10程度ということで、結局、料理Aを作る個数を固定した全探索で解決できそうというオチでした。

方針だけ決まれば、あとは普通に実装してAC。25分28秒で3完です。

初手で難しく考えすぎていたところで、10分以上ロスしてしまいました。。

提出コード

https://atcoder.jp/contests/abc338/submissions/49713229

D問題

D - Island Tour

iを壊した場合に通る橋の数と、橋iを壊さない場合に通る橋の数は、ツアー中のぞれぞれの移動について独立に考えることができそうです。

  • ans \lbrack i \rbrack :=iを壊した場合、すべての橋が残っている状態から比較して、ツアーの旅程で通る橋の数がどれだけプラスされるか。

上記の値が計算できれば、あとは最小値を取って、すべての橋が残っている場合のツアー中に通る橋の数と足すことで答えになる。

例えば、島の数が10個で、島3から島6に移動する場合、橋3から5のいずれかが破壊される場合は、破壊されない場合に比べて4つ余計に橋を通る必要が出てくる。よって、橋3から5それぞれに4を足すという要領です。

しかし、これを普通に計算するとTLEになるので、区間加算かつ最小値取得を効率的にできれば良いという感じだが、やり方がなかなか思いつかない。。

で、結局、D問題で使うのは場違いかと思ったが遅延セグ木を使って、区間加算と最小取得を行うぐらいしか思いつきませんでした。

使い慣れないライブラリなので、実装に悪戦苦闘しながらも、なんとかサンプルが通る実装を作って提出。なんとかACを取り切ることができましたとさ。87分36秒で4完です。

あとで解説を確認すると、imos法で解けた問題だったとのこと。履修済みのアルゴリズムが咄嗟に出て来なかったのは反省材料ですが、なんとか通し切ることができたのは良かったかと。

提出コード

https://atcoder.jp/contests/abc338/submissions/49735426

E問題

E - Digit Sum Divisible

C、Dで大分時間を消費したので、ほぼ絶望的な状態で臨んだE問題。

一応、問題に目を通したのものの、何にも解法が浮かばずで時間切れ終了になりましたとさ。

F問題

F - Rotation Puzzle

問題文すら読んでいません。

G問題

G - 16 Integers

問題文すら読んでいません。

これまでの実績

今回、再入水はお預け。が、致命的な負けでは無いので、次回取り戻せればと。

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

総括

今回は、問題文を難しく考えたがために、余計な時間を喰ってしまうというミスがあった回でした。

結局、まだまだ緑Diffレベルの基礎も曖昧な状態になっているということでしょう。当面は、基礎の振り返りに全力を入れていきたいと思います。

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