AGC049

BCの2完。時間を捌けたのはよかった。レーティングは上がったけどAが解けなかったダメージがけっこうある。みかんを食べながらやったが、さすがに疲れていて解説をしっかり考えることができない。

A - Erasing Vertices

全然わからなかったが、考察で現れた解けるべき部分問題が解けず力のなさを感じた。

(解説を見て)やはりこれは悔しい。まだよく理解してないけど。連結成分毎に足せばいいのは最後のころ気づいてたんだよね。完全に力不足。これがAGC

B - Flip Digits

0を空きマスみたいに思うとこの操作は、連続した2個の1を消すか、1を左に動かすか。サンプル3を手で解いて確認。移動を少なくしたいので、貪欲に近いものを取る。選んだものの左にある1の個数が偶数でなければならないことに注意。Tの1から見て、Sで自分より左にある1は取れないし、右側でより遠いものを取るメリットも(いくつかの例を試して)なさそう。相手を選びながら距離を足していく。必要な操作回数がO(N)で済まないことに注意。相手がいなかったら-1。Sで残ったものを左からペアにしていく。距離-1+1でこれも結局距離を足していくだけ。相手がいなかったら-1。

(解説を見て)よくわからんけど累積xorが出てくるのは天才っぽい。

C - Robots

いつもの自分がやっているように手を動かしているとだんだん解に近づいていくという、最近のAGCには珍しい解き味。問題の趣旨を理解するのに時間がかかるが、Dもちょっと見てわかりにくいほうがまだのぞみがあると思った。操作する対象はロボット。移動してもロボットの番号は変わらない。自分より左にあるロボットしか壊せない。さて、左にあるロボットから順に操作していって座標0に到達するロボットが1つだけの場合、誰かに壊してもらうことができればそれでいいし、そうでなければ1回は書き換える必要がある(適当なボールを書き換えてすぐ後ろのロボットで破壊すれば1回で済む(「壊してもらうことができ」ない場合なのですぐ後ろに元から動かすべきロボットは存在しない))。問題は複数ある場合だが、座標0に到達する一番右のロボットで一掃できて嬉しいかと思いきや、それを壊すためのロボットは遥か右にある。そういえば答えの上限はN(1個書き換えれば自分の後ろのロボットに破壊してもらえるし、対象が連続していたらまとめて壊してもらえる)。ボールを増やすんじゃなくて書き換えなので、二分探索もちょっと考えた。ここで、座標1にまで移動するロボットは高々1つでいいみたいな重要な性質に気づく(複数あったとすると一番右の以外無意味になる)。壊してもらう以外にもギリギリだからボールを書き換えて減らすという手もあって大変そうだったが、座標1に行くロボットを固定すれば希望が見える。座標1に行ってから破壊してもらうんだったら最初から1個ずつ破壊するのでいいから、あまったボールは全て書き換えることになる。それで他をカバーできればそれだけでいいし、破壊しきれないなら残ったロボットの数だけ書き換える。座標0に行かないロボットが掃除してくれる範囲は二分探索で求め、その区間の合併はいもす法(自分だけ掃除してもらわず座標1まで走るという選択肢がまさることもあり可能でもあることに注意)。元の状態で座標0に到達してしまい掃除してももらえないロボットがそこから右に何個あるか累積和を持つ。あとは最小値を求めるだけ。さすがに提出前からドキドキした。かなり甘めの考察だったので、不安でもあった。