blog.bouzuya.net

2020-07-28 ARC040 A, B, C

ARC040 A, B, C 考察

ARC040 A 床塗り

N * N のすべての要素を前から順に走査して赤の個数・青の個数を数える。それらを比較して指定された文字列を出力する。

https://atcoder.jp/contests/arc040/submissions/15495562

ARC040 B 直線塗り

N <= 100 なので N ^ 2 の二重ループの形でも時間的には問題ない。

銃を撃つ回数を最小にしようと思うと '.' の上に移動してから銃を撃つと良い。こうすれば射程をうまく活かすことができて無駄撃ちを減らせる。ただし移動回数を最小にしようと思うと '.' をすべて塗ることができる最小限の移動に留めるのが良い。つまり右端の '.' に届くなら '.' の上まで移動しない。

全体の最も右にある '.' の位置を確認しそれがなくなるまで時間経過をシミュレーションした。各時間ごとに撃つか移動するかを選ぶ。最も右の '.' が射程内にあるなら終了する。そうでなければ '.' の上に居るなら撃つ。そうでなければ移動する。

難しくはないのだけど簡単そうに見えて意外と面倒くさい。

解説を見ると移動の回数と撃つ回数を別で求めて足している。賢い。

https://atcoder.jp/contests/arc040/submissions/15495636

ARC040 C Z 塗り

1 行目から順に各行を操作する。それぞれ塗られていない箇所を Z の下に下がる位置だと思って塗る。これを繰り返す。塗る回数を出力する。

B よりむしろ簡単に感じた。

https://atcoder.jp/contests/arc040/submissions/15496430


リングフィットアドベンチャー 41 日目 レベル 82 ワールド 9 。