鹿島建設プログラミングコンテスト2020 (AtCoder Regular Contest 110) 参加記

2020/12/5に開催された鹿島建設プログラミングコンテスト2020 (AtCoder Regular Contest 110)に参加しました。

atcoder.jp

現レートは790。緑まであと10というとこだったので、今回でなんとか緑復帰ができればなーという感じで臨みました。

今回の結果

で、今回は2完というなんとも微妙な結果となりました。

ARC110結果

ARC110結果

んで、緑の下の方のパフォーマンスだったので、レーティングは少し上昇するも入緑ならずという、これまたなんとも微妙な結果で終了です。

振り返り

B問題で相当手こずってしまい、あとの問題に回す時間がなくなってしまいました。

ARC110提出結果

ARC110提出結果

A問題

A - Redundant Redundancy

2からNまで掛け合わせた数に1足せばOK。。と思ったらN=30のときに解答の上限である10^{13}を超えてしまうことに気づく。

なんとかこれを小さくできないかと色々試行錯誤した結果、30以下の素数を1回ずつ掛け合わせて、あとは素数の階乗になる数に対応するため、2を3回、5を1回追加で掛け合わせた数に1足した数を出力することで、ACが取れました。

もうN関係ないやんw

 公式解説をみると、最小公倍数を求めるとあり、あーそういう狙いの問題だったんだねーと気づきました。まあ確かにそのやり方が王道だよな。

B問題

B - Many 110

N=1のときがコーナーケースでT=1なら2 \times 10^{10}T=0なら10^{10}を返す。

で、あとはN以上の長さになるように110を連結した文字列を生成して、contains関数でTが含まれているかどうかを確認。含まれている場合は、Nを場合分けして出力すればOK。。。と、思ってましたが、サンプルが通る実装を投げてみたら、ものの見事にWAを喰らってしまいました。

検討したところ、場合分けの考慮が足りなかったので、Tが"11"、“10”、”01”それぞれで始まるケースを考慮し、それぞれについてNに0、1、2を足してあとは3で割った数を切り上げた数を10^{10} + 1から引くという解法でACが取れました。

とまあ書くだけなら簡単ですが、本番では結構試行錯誤してしまい、結局この問題で1時間もとられてしまいました。。

C問題

C - Exoswap

一番でかい数字から右端に寄せていく手順を繰り返して、同じ操作が2回出てきたらソート不可能という感じで解けるかなーという考察。

が、、考察が終わったところで残り20分足らず。結局頑張って実装してみたが、サンプルが通る実装もできずで、無念の時間切れとなりました。

これが通れば余裕で緑復帰となったところですが、如何せん実装力もまだまだ及ばないようです。

D問題

D - Binomial Coefficient is Fun 

問題すら見れてません。

E問題

E - Shorten ABC

問題すら見れてません。 

F問題

F - Esoswap

問題すら見れてません。 

これまでの実績

今回、緑復帰はおあずけとなりました。最近800付近のパフォーマンスで安定してしまっているので、緑以上で安定するにはもう少し精進が必要ですね。

コンテスト実績

コンテスト実績

総括

今回のARCもなんとか2完緑パフォという結果でしたが、今後緑以上を目指すためにはARCだと3完以上が求められるなーという感じがします。過去のARCのC以上の過去問も積極的に解いていこうと思います。

また、次回も頑張ります。