AtCoder Beginner Contest 233 参加記

2021/12/25に開催されたAtCoder Beginner Contest 233に参加しました。

atcoder.jp

前回と前々回のコンテストでは思うような結果が残せず、結果として連続でレートが下がってしまいました。今回は2021年最後のABCコンテストということで、良い結果を残して来年に繋げようかということで、とりあえずレート上げを最低限の目標として臨むこととしました。

今回の結果

で、結果としては5完を達成。タイムは個人的にはまずまず良好かなという印象です。

ABC233結果
ABC233結果

パフォーマンスは水色。とりあえず4桁レートに復帰ということで、満足のいく結果で終えることができました。

振り返り

今回、E問題までが緑Diffだったようで、個人的には5完がノルマという問題セットでしたね。

ABC233提出結果
ABC233提出結果

A問題

A - 10yen Stamp

\lceil \frac{Y - X}{10} \rceilを求める問題。マイナスのケースも考慮が必要な為、実装としては以下の要領で行う。

System.out.println(Math.max((y - x + 9) / 10, 0));

問題なくACを取ることができました。

提出コード

https://atcoder.jp/contests/abc233/submissions/28113606

B問題

B - A Reverse

StringBuilderのreverseメソッドを部分的に使えば良いかと思ったが、逆に実装がややこしくなりそうなので無難に以下の要領で実装。

  1. S_LS_Rを入れ替え
  2. Lをプラス1、Rをマイナス1する
  3. L \lt Rの場合、再度1.の処理を行う

これで問題なくACが取れましたとさ。

提出コード

https://atcoder.jp/contests/abc233/submissions/28119424

C問題

C - Product

一読しただけでは、制約条件の上限値がよく分からなかったが、C問題といえばとりあえず全探索でなんとかなるという印象のため、まずは愚直に全探索で実装する方針で取り掛かることに。

とりあえずDFSで全探索のロジックを作成。計算過程では一応オーバーフローを考慮したり、剰余を計算して多少の効率化を図ったりなど工夫を凝らしたところ、多少実装に手間取ったものの、なんとかACが取れました。

提出コード

https://atcoder.jp/contests/abc233/submissions/28130933

D問題

D - Count Interval

結果として、やったことは、公式解説と大体同じようなことになりました。

与えられた数列Aの合計SUMを計算していく過程で、各要素までの累積和とその値が何回現れたかを管理する連想配列を作成することを考える。

あとは、SUMの計算途中で連想配列よりSUM - Kの出現回数を答えに足し合わせていけば答えを導くことができる。

ということで実装にかかり、一度はオーバーフロー要因と思われるWAを出してしまうも、2回目の提出でACを取ることができました。

提出コード

https://atcoder.jp/contests/abc233/submissions/28135364

E問題

E - Σ[k=0..10^100]floor(X/10^k)

見た目がややこしそうな問題だったが、サンプルを見るとX = 1225の場合、1225 + 122 + 12 + 1という要領で、元の数を10で割った値をひたすら足し続ける問題のようだ。

制約からするに、Javaでまともに計算するのは不可能そうなので、以下のような工夫を用いて解くことに。

array[ i ] := Aの先頭1桁目からi桁目の数字をそれぞれ1桁の数字と見做して合算した値を前計算で作成する。

あとは、arrayの後ろの値から、10の剰余を答えの桁として追加し、10で割った商を繰り上がり分として、arrayの一つ前の値に足していく。

この処理をarrayの先頭まで続けて、array[1]の値はそのまま答えの先頭に設定する。

上記の要領で実装を行い、なんとかACを取ることができました!

余談だが、この問題、Pythonだと普通に計算しても解けてしまうようですね。この辺に競プロとしてのJavaの不便さというか、メリットのなさを感じてしまう。。

提出コード

https://atcoder.jp/contests/abc233/submissions/28139257

F問題

F - Swap and Sort

30分ぐらい時間があったので、問題を熟読してみましたが、解法は全く思いつかずで、結局時間切れとなりました。

あとで確認すると、bitDPの応用問題ということ。今後上位に上がるためには必須となる知識と思われるので、後日解説ACしておこうと思います。

G問題

G - Strongest Takahashi

ワンチャンあるかと、問題はチラ見してみましたが早々に諦め。

Ex問題

Ex - Manhattan Christmas Tree

問題すらみれておりません。

これまでの実績

とりあえず、4桁レートに復帰しました。とはいえ、ここから上に行くのはしんどそうだなーという気がしなくもないです。

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

総括

今回ある程度早めの5完達成ということで、なんとか水色パフォまで出すことができました。とはいえ、今後自分が水色コーダーになろうと思ったら、今回のパフォーマンスが最低ノルマで、青パフォを射程圏内に入れるこが求められるかと思います。

そのためには、今回解けなかったF問題をはじめ、青Diffまでの過去問は積極的に取り組んでいく必要がありますね。これは、年末年始などの空いた時間でやっていこうと思います。

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