AtCoder Regular Contest 166 参加記

2023/10/8に開催されたAtCoder Regular Contest 166に参加しました。

atcoder.jp

土曜のABCは、3完緑パフォという残念な結果で、レートの方は緑落ち間近というところまで落ちてしまいました。

今回負けを喰らえば、即緑落ちというところですが、これまでも目先のレートを守るためにUnratedで参加する意味もないという考えでやって来たので、今回もRated参加します。

配点を見ると、2完行かないと水パフォは厳しいかという感じなので、2完目標で挑むこととしました。

今回の結果

結局、0完爆死を喰らってしまいました(泣)

ARC166結果
ARC166結果

今回の0完は灰パフォということで、レートの方は大きく下落。またまた緑コーダーの身分に戻ることとなりましたとさ。

振り返り

Aはともかくとして、BのREを解決することが出来なかったのが残念でした。

ARC166提出結果
ARC166提出結果

A問題

A - Replace C or Swap AB

CACBABBA、以上3種類の操作を繰り返すことで、文字列Xを文字列Yにすることができるかという問題。

最初の方、BAABの操作も可能と誤読したせいで、誤った実装方針で突き進んでしまいました。

当初の実装方針としては、

  • Xの文字をCにすることができないので、Y_iCで、X_iCでない場合はNG。

  • Yの文字をCで区切った範囲でXを見た時、それぞれの文字列を、X(i, j)Y(i, j)とすると、X(i, j)上のAの文字数が、Y(i, j)Aの文字数を超えるか、X(i, j)上のBの文字数が、Y(i, j)Bの文字数を超える場合はNG。

という感じで組んでましたが、サンプルが通らなかったタイミングで、結局、文字の移動がABBA一方通行になるのでこれではダメということに気づきました。

方針は半分合ってそうな気がするので、あとはABBAの操作に限定された時にどのような判定をすべきかというところなのですが、これが思いつかず。

色々悩んでるうちに、コンテスト時間の半分を使ってしまったので、一旦飛ばしてB問題に取り組むこととしました。

B問題

B - Make Multiples

  • 相異なるi,j,kについて、A_iaの倍数、A_jbの倍数、A_kcの倍数にする操作をしたときの最小操作回数。

  • 相異なるi,jについて、A_ilcm(a,b)の倍数、A_jcの倍数にする操作をしたときの最小操作回数。

  • 相異なるi,jについて、A_ilcm(a,c)の倍数、A_jbの倍数にする操作をしたときの最小操作回数。

  • 相異なるi,jについて、A_ilcm(b,c)の倍数、A_jaの倍数にする操作をしたときの最小操作回数。

  • A_ilcm(a,b,c) 倍数にする操作をしたときの最小操作回数。

以上の操作回数から最小のものを選ベば良いだろうというのが方針として見えて来たので、あとは実装するだけ。

最初は、配列Aに対して、前記の7種類の操作回数をそれぞれ愚直に計算して、それぞれ操作回数で降順ソートしてから、先頭の高々3要素を引っ張ってきて全探索すれば良いかということで組んでみました。

が、これを提出してみたら、なぜかRE。。。

当初、N要素について7種類全ての操作回数を計算したあとソートしているので、メモリの食い過ぎかと思い、途中で不要になった配列を廃棄したり、GCかましてみたりしましたが、全くREが取れず。

結局、このREが取れないまま、時間切れを迎えてしまいました。

で、後で振り返ってみると、REの原因は単なる配列外参照ということが判明。。

このバグをとっておけば、最初の7種の操作回数全てソートでも普通に通っていたようです。サンプルのテスト結果を普通に確認できていれば防げたバグだけに、悔やまれます。

C問題

C - LU / RD Marking

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

D問題

D - Interval Counts

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

E問題

E - Fizz Buzz Difference

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

F問題

F - Tangent Addition Formula

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

これまでの実績

この土日で、レートを99落としてしまいました。。

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

総括

A問題は、自分の考察力不足で解けず。B問題は、自分の単純ミスで解けずということで、まだまだ足りない部分があるということを痛感した回でした。

今回は惨敗しましたが、また水色コーダーに戻れるように、今回の復習を含め、日々精進していきます。

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