AtCoder Regular Contest 149 参加記

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

atcoder.jp

昨日のABCでは、緑パフォで冷えという残念な結果でした。

今回のARCでは、気持ちを切り替えて、最近停滞気味のレートを一気に上げようということで、目標は高く3完を目指そうという気持ちで臨むこととしました。

今回の結果

早いうちに2完を達成できましたが、3完を達成することはできませんでした。

ARC149結果
ARC149結果

しかしながら、パフォーマンスは水色の中盤あたりまで出てくれまして、最近停滞気味のレートも大きく上昇させることが出来ました。

振り返り

C問題を解き切ることが出来ませんでした。

ARC149提出結果
ARC149提出結果

A問題

A - Repdigit Number

検討したところ、dpっぽくやれば解けるかもということで、以下のdpを考えてみる。

  • dp\lbrack i \rbrack \lbrack j \rbrack :=10進数でji個並べた数字をMで割った時の余り

  • 遷移は、 dp\lbrack i \rbrack \lbrack j \rbrack = ( ( 10 \times dp\lbrack i - 1 \rbrack \lbrack j \rbrack ) + j ) \% M

  • i, jの大きい順から見ていき、dp\lbrack i \rbrack \lbrack j \rbrack = 0となるi, jがあれば、ji個並べた値が答え。なければ-1

あとは実装して、一回でACを取る事ができました。

16分54秒で1完。この時点でAのACが900以上ぐらいだったので、少し出遅れた感あり。

提出コード

https://atcoder.jp/contests/arc149/submissions/35348563

B問題

B - Two LIS Sum

一読して、問題の意味は分かるものの、解法自体はすぐには思いつかず。。

とりあえず、考えた感じ、並び替えは何回でもできるので、数列A, BのどちらかのLISはNとして最大化できるはず。

ということは、A全体をソートした時のBのLIS + Nか、B全体をソートした時のAのLIS + Nの大きい方が答えになるような気がする。

思いつける解法がこれぐらいしかないという感じだったが、この解法で実装してみたところサンプルまでは通ったので提出。なんとか一発でACを取り切ることができました。

38分18秒で2完。エスパー解法が大当たりで助かりました(笑)

因みに、公式解説によれば、A全体をソートした時のBのLIS + Nだけでよかったようです。

提出コード

https://atcoder.jp/contests/arc149/submissions/35351153

C問題

C - Avoid Prime Sum

奇数+奇数や偶数+偶数の組は絶対に素数でないことから、この特性を上手く利用するのかなあと思ったが、上手い使い方が全く思いつかず。

とりあえず、全く解法が思いつかないので、苦し紛れの実装でなんとかならないか試してみる。

1N^2の数字をランダムソートしてキューに突っ込み。左上のマスから順番に値を決めてみて、隣接するマスの値との和が素数なら、キューから取り直してみるという、いわば運試しのような実装。

が、、N = 1000のケースを走らせてみると、てんで通らないので、適当に決めたらどうもダメみたいという知見だけを得て終了。

その後も、色々試行錯誤しましたが、結局解き切ることはできずで、時間切れとなりました。

コンテスト終了後、解説を見たところ、やはり冒頭の特性を使うのが正解だったようだが、使い方が全く思いつかなかったものでした。結局考察力が足りなかったということですな。

D問題

D - Simultaneous Sugoroku

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

E問題

E - Sliding Window Sort

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

F問題

F - Rational Number System

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

これまでの実績

大きくレートは上昇。水色への道を着々と進んでおります。

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

総括

今回は、エスパー解法が当たってくれたおかげで、大きなレート上昇を勝ち取りました。

しかし、これで満足していては、次回のARCで大負けをしかねないですな。

10月はARCが連続であるようなので、ここで大きくレートを上げられるように準備していきたいと思います。

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