AtCoder Regular Contest 151 参加記

2022/10/16に開催されたAtCoder Regular Contest 151に参加しました。

atcoder.jp

昨日のABCは所用のため参加できずでしたが、今週はARCがある週。

現在、レートは入水まであと少しというところまで来ているので、ここいらでなんとか水パフォをとって入水を決めようという気持ちで臨むこととしました。

今回の結果

残念なことに、1完をとるのがやっとという有様でした。

ARC151結果
ARC151結果

今回はなんと、久々の茶パフォ。。レートを大きく落としてしまい、水色コーダーへの道のりも遠いものとなってしまいました。

振り返り

A問題を解き切るだけで精一杯でした。

ARC151提出結果
ARC151提出結果

A問題

A - Equal Hamming Distances

最近のARCでは、毎回A問題が鬼門なのだが、今回のA問題もやたらと難しく感じる。。

まず、問題文を理解するまで10分程度。その後の方針を立てるのにもやたら時間がかかり、開始から30分経っても、ほぼ解法がわからない状態。。

とりあえず、ここぐらいから方針らしきものが立ってくる。とりあえず、S_i \ne T_iとなるiに着目すれば、iの個数が奇数の場合は、そもそも答えを作ることができないので、-1が答えとなる。

次に、S_i \ne T_iとなるiをソートした配列を両端キューで管理することを考えてみる。

まず、キューの先頭からiを取得したときに、S_i,T_iのうち1である方を0にする。次に、キューの末尾から位置jを取り出し、S_j,T_jのうち、さきほど0に変えた方とは違う方に対して01をひっくり返せばなんとかなるかと。。

が、これはWA。。

次に、S_i = T_i = 1の場合は、U_i = 0にしてもいいじゃないかと気づき、実装に追加してみるが、これも結局WA。。

その後もあれやこれやと試してみたが、何もわからず。気が付けば開始からゆうに1時間を経過しており、0完爆死が現実的なところとして見えてきました。。。

仕方がないので、ある程度開き直って貪欲っぽい処理でなんとかならんか考えてみる。

キューの先頭からiを取得したときに、S_i,T_iのうち1である方を0にするが、その時変えなかった方については、先頭から貪欲にみて、10にすることで、ハミング距離を一緒にできるかを試してみる。

出来なかった場合は、後ろからみて、01にすることでハミング距離を一緒にする。

こんな感じで実装したら、やっとこさACを取ることができましたとさ。

87分54秒3ペナとボロボロになりながらも、なんとか1完。この時点で、順位は2000位ぐらい。。

てゆうか、大分解かれすぎだろ。そんなに簡単か?この問題。。

提出コード

https://atcoder.jp/contests/arc151/submissions/35732263

B問題

B - A < AP

とりあえず、30分ほど余しているので、検討に着手してみるが何もわからず。

半ば戦意喪失のまま時間切れとなりましたとさ。

C問題

C - 01 Game

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

D問題

D - Binary Representations and Queries

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

E問題

E - Keep Being Substring

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

F問題

F - RGB Card Game

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

これまでの実績

前回ARCは、1完でもかすり傷でしたが、今回は大ダメージを喰らってしまいました。。

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

総括

今回は、もう0完で爆死とならなかったのが、せめてもの救い。前回も書きましたが、ARCは、問題セットの相性が結果に大きく響きますな。

とりあえず、過ぎたことは考えても仕方なし。次回以降また気持ちを切り替えて臨もうと思います。

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