Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

AtCoder DISCO presents ディスカバリーチャンネル コードコンテスト2020 予選

4完7WA。7WAて!!

各問題

A - DDCC Finals

まあ与えられた順位を元にif文で分岐するだけの問題です。ARC級だけに?100点のわりにはちょっと手応えのある問題かも。

B - Iron Bar Cutting

まず操作についてですが、伸ばすのも縮めるのもコストが同じなので、いかなる時も伸ばすで問題ありません。つまり2ミリメートル以上のものをうんぬんという条件は考えなくてもいいです。

で、自分の解法は、累積和を取って、半分を超える直前の位置で分割したときの左右の棒の長さの差(絶対値)と、半分を超える直後のそれを比較して小さいほうが解、としました。

C - Strawberry Cakes

めちゃくちゃ ぐちょくに じっそうしました

まず横一列だけで考えて、数字を埋めていきます。 ルールは、イチゴが現れるたびに数字を変えていきます。ただし一個目のイチゴだけは変えません。 また、イチゴのない列はとりあえず無視します。

つまり...#..#..#..とあったときは111111222333みたいにします。

次に、一旦無視した空白行について、直前か直後にある数字をそのまま持ってきます。

つまり

............
...#..#..#..
............
...#.....#..

とあったときは

____________
111111222333
____________
444444444555

となって、そこから

111111222333
111111222333
444444444555
444444444555

みたいにします。

以上です。

多分もうちょっとスタイリッシュに分ける方法はあると思います・・・。

D - Digit Sum Replace

(追記)

以下の解法は、私がコンテスト中に無理やりひねり出したものなので、より美しい解法についてはeditorialを参照してください。

(追記ここまで)

ちょっと実験すると、同じ数字が10個並んでいるのを処理すると、元の数字1つに戻ることがわかります。また、その時の処理回数はd+9です。(実験した結果そうなったのであって、無証明です・・・。) それを利用すれば、cを10未満の数にすることがほぼ定数でできて、あとは愚直にシミュレーションしてもたかだかM*10程度で終わります。

自分はこれを終了30分前に書き上げたはずだったのですが、書いたつもりで書けていなかったたった1行のために最終的に7WAを出したあげく終了3分前までAC取れませんでした。

とにかく落ち着けと自分に言いたい。まあ3分前に気づけたのがむしろ僥倖なのかもしれないですが。

E, F

チラ見しただけ

まとめ

例によって落ち着きが足らず、順位を200位ほど落とす結果となってしまいました。ああ・・・。青パフォ余裕だったはずなのに・・・。

まあ、そこも含めて実力ということですね。はい。

(追記) 青パフォは惜しくも逃しましたが、Highest更新で水色復帰しました!!!

f:id:mdstoy:20191123232357p:plain

f:id:mdstoy:20191123232445p:plain