2021/12/25に開催されたAtCoder Beginner Contest 233に参加しました。
前回と前々回のコンテストでは思うような結果が残せず、結果として連続でレートが下がってしまいました。今回は2021年最後のABCコンテストということで、良い結果を残して来年に繋げようかということで、とりあえずレート上げを最低限の目標として臨むこととしました。
参加します。2021年最後のABCコンテスト。冷えて終わることがないようにしたいですな。
— devgenjin77 (@devgenjin77) 2021年12月25日
AtCoder Beginner Contest 233 - AtCoder https://t.co/fM7RYMSVAs
今回の結果
で、結果としては5完を達成。タイムは個人的にはまずまず良好かなという印象です。
パフォーマンスは水色。とりあえず4桁レートに復帰ということで、満足のいく結果で終えることができました。
5完水パフォで4桁レートに復帰しました😂😂
— devgenjin77 (@devgenjin77) 2021年12月25日
明日も頑張ります✊
devgenjin77さんのAtCoder Beginner Contest 233での成績:1216位
パフォーマンス:1319相当
レーティング:981→1020 (+39) :)
Highestを更新しました!#AtCoder #ABC233 https://t.co/JVIF5eDrce
振り返り
今回、E問題までが緑Diffだったようで、個人的には5完がノルマという問題セットでしたね。
A問題
を求める問題。マイナスのケースも考慮が必要な為、実装としては以下の要領で行う。
System.out.println(Math.max((y - x + 9) / 10, 0));
問題なくACを取ることができました。
提出コード
https://atcoder.jp/contests/abc233/submissions/28113606
B問題
StringBuilderのreverseメソッドを部分的に使えば良いかと思ったが、逆に実装がややこしくなりそうなので無難に以下の要領で実装。
- とを入れ替え
- をプラス1、をマイナス1する
- の場合、再度1.の処理を行う
これで問題なくACが取れましたとさ。
提出コード
https://atcoder.jp/contests/abc233/submissions/28119424
C問題
一読しただけでは、制約条件の上限値がよく分からなかったが、C問題といえばとりあえず全探索でなんとかなるという印象のため、まずは愚直に全探索で実装する方針で取り掛かることに。
とりあえずDFSで全探索のロジックを作成。計算過程では一応オーバーフローを考慮したり、剰余を計算して多少の効率化を図ったりなど工夫を凝らしたところ、多少実装に手間取ったものの、なんとかACが取れました。
提出コード
https://atcoder.jp/contests/abc233/submissions/28130933
D問題
結果として、やったことは、公式解説と大体同じようなことになりました。
与えられた数列の合計を計算していく過程で、各要素までの累積和とその値が何回現れたかを管理する連想配列を作成することを考える。
あとは、の計算途中で連想配列よりの出現回数を答えに足し合わせていけば答えを導くことができる。
ということで実装にかかり、一度はオーバーフロー要因と思われるWAを出してしまうも、2回目の提出でACを取ることができました。
提出コード
https://atcoder.jp/contests/abc233/submissions/28135364
E問題
E - Σ[k=0..10^100]floor(X/10^k)
見た目がややこしそうな問題だったが、サンプルを見るとの場合、という要領で、元の数を10で割った値をひたすら足し続ける問題のようだ。
制約からするに、Javaでまともに計算するのは不可能そうなので、以下のような工夫を用いて解くことに。
の先頭1桁目から桁目の数字をそれぞれ1桁の数字と見做して合算した値を前計算で作成する。
あとは、の後ろの値から、10の剰余を答えの桁として追加し、10で割った商を繰り上がり分として、の一つ前の値に足していく。
この処理をの先頭まで続けて、の値はそのまま答えの先頭に設定する。
上記の要領で実装を行い、なんとかACを取ることができました!
余談だが、この問題、Pythonだと普通に計算しても解けてしまうようですね。この辺に競プロとしてのJavaの不便さというか、メリットのなさを感じてしまう。。
提出コード
https://atcoder.jp/contests/abc233/submissions/28139257
F問題
30分ぐらい時間があったので、問題を熟読してみましたが、解法は全く思いつかずで、結局時間切れとなりました。
あとで確認すると、bitDPの応用問題ということ。今後上位に上がるためには必須となる知識と思われるので、後日解説ACしておこうと思います。
G問題
ワンチャンあるかと、問題はチラ見してみましたが早々に諦め。
Ex問題
問題すらみれておりません。
これまでの実績
とりあえず、4桁レートに復帰しました。とはいえ、ここから上に行くのはしんどそうだなーという気がしなくもないです。
総括
今回ある程度早めの5完達成ということで、なんとか水色パフォまで出すことができました。とはいえ、今後自分が水色コーダーになろうと思ったら、今回のパフォーマンスが最低ノルマで、青パフォを射程圏内に入れるこが求められるかと思います。
そのためには、今回解けなかったF問題をはじめ、青Diffまでの過去問は積極的に取り組んでいく必要がありますね。これは、年末年始などの空いた時間でやっていこうと思います。
ということで、また次回も頑張ります。