ABC140 D. Face Produces Unhappiness
問題
N人の人が一列に並んでおり、各人が左を向いているか右を向いているかの情報が文字列Sで与えられる。
各人は、目の前の人が自分と同じ方向を向いていればhappyであり、そうでなければunhappyである。
ここで、0回以上K回以下で、好きな回数だけ以下の操作ができる
- 1 <= l <= r <= Nを満たすl,rを選び、左からl~r番目の人の列を180度回転する
このとき、happyな人の人数は最大で何人にすることができるか?
制約
- 1 <= N <= 10^5
- 1 <= K <= 10^5
- |S| = N, S[i] = LまたはR
解法
操作によって変化する量を確認する。
すると、変化する部分は、指定したl,rの付近のみで、l-1とl、rとr+1の文字のみを考えればよいことがわかる。
今、unhappyな人をできるだけ減らしたいので、そのような人の部分を操作によって減らしていければ良い。
例えば、
LLLLRRRRRRLLLLL
のような場合は、Rの部分を操作するとすべてLになり、unhappyな人がその両端の2人分減らすことができる。
したがって、隣り合う文字列が異なる個数Xを求めて、最大K回まで-2していくことができるので、最終的に「N-1-max(0, X-2*K)」が答えになる。
反省
- 考察をちゃんとできれば無駄な実装なしで簡潔にできる