AtCoder Regular Contest 163 参加記

2023/7/2に開催されたAtCoder Regular Contest 163に参加しました。

atcoder.jp

前回のARCでは、0完爆死を喰らってしまい、レートが暴落してしまいました。また、今年に入ってから、何故かARCでは全くいい結果が出せず、ボロ負けしたという思い出しかありません。

最近、ARCには大分苦手意識が芽生えているところですが、とりあえず今回もRatedで参加。爆死だけは避けようという気持ちで臨みます。

今回の結果

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

ARC163結果
ARC163結果

これで、パフォーマンスは、今のレートぐらい。プラマイ0という結果でしたが、前言通りボロ負けしなかったのでヨシとします。

振り返り

A,Bとも、もう少しシンプルに解けるはずが、難しく考えてしまい、余計な時間を掛けてしまいました。

ARC163提出結果
ARC163提出結果

A問題

A - Divide String

前回に続いてA問題は300点なので、今度こそサクッと解きたいところ。

とりあえず問題を読んでみると、文字列St_1 \lt t_2である2つの文字列に分割できれば良いらしい。

文字列Sを2文字目から末尾まで見ていって、S_1 \lt S_iとなるiがあれば答えはYesS_1 = S_iであった場合は、先頭からi - 1文字までの文字列と、それ以降の文字列を比較して、後者が辞書順で大きければYes

という感じで実装。前回のこともあるので、検証は念入りに実施して、多分大丈夫だろうというところで提出。ACを取ることができました。

13分6秒で1完。一応、0完爆死は免れたのでホッとしたという感じでしたが、順位表をみると、これが大分解かれている問題。

改めて考えてみれば、単純な全探索なので、もっとシンプルに解けばよかったかなあという印象です。

提出コード

https://atcoder.jp/contests/arc163/submissions/43186866

B問題

B - Favorite Game

問題を一読した感じ、多分A_1A_2に対する操作のみを考慮すれば良さげ。

配列A = (A_3,...,A_N)をソートしてから、長さM区間の先頭と末尾の要素を見て、最小値と最大値を調整すれば良い。

というのが、本来の解法でしたが、何を思ったか、(A_3,...,A_N)の各要素を、予め最小値との差に補正する前計算を入れてみたり、A_1 \gt A_2の場合は、最初に基準値をどちらかに寄せるなど、変な方向に実装を進めてしまったので、かえってバグを埋め込みWAの連発を喰らいました。。

結局、都合1時間ぐらいかかって、やっとシンプルな解法に気づき、ACを獲得。

70分8秒3ペナで2完。どうも、ARCの問題に苦手意識があるせいで、疑心暗鬼になってしまい、問題を難しい方に考える悪癖ができてしまっているようです。

提出コード

https://atcoder.jp/contests/arc163/submissions/43195881

C問題

C - Harmonic Mean

Bで立ち遅れた分を、なんとか取り戻したかったのですが、これは全然わからず。。

そこそこAC数があるようで、なんかの典型かなあと思ってたりしましたが、結局、ここで時間切れです。

D問題

D - Sum of SCC

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

E問題

E - Chmin XOR Game

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

F問題

F - Many Increasing Problems

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

これまでの実績

とりあえず今回は引き分けという結果。次のARCはなんとしても勝ちたいところです。

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

総括

AとBをペナ無しで解けてたら、勝っていたかというところでしたが、グダグダの結果になってしまいました。

ちなみに、C問題は解説を見ましたが、これを本番で思いつくとくことが全く想定できません。みんなどうやって思いつくんだろう。余程数学に明るく無いと思いつかんなあ。。

ARCは、これが典型というのが中々無いので、精進が捗りません。この際、他の人の提出なども見て、どうやって解くかの参考にしていこうかと思います。

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