AtCoder Beginner Contest 259 C問題 XX to XXX
問題
提出解答
問題の概要
英小文字からなる列 が与えられる. に対して次の操作を任意回繰り返して, に一致させることができるか?
- において, 同じ文字が2つ連続しているところの間にその文字を挿入させる.
制約
- は長さ 以上 以下の英小文字列
解法
の Run Length をそれぞれ
とする. このとき, 操作によって を に一致させることが可能なことと, 以下は同値である.
- .
- に対して, .
- に対して, または, かつ .
これを証明する.
- 十分性: に対して1回操作を施した文字列 に対して上が成り立つことが成り立つことを見れば良い. 上2つについては明らかに成り立つ. 一番下についても操作を施さなかったところのブロックはそのままであり, 施した部分のブロックは元の長さが 以上であり, 操作によって 増えるから従う.
- 必要性: に対して, ならば であるから, そのブロックに対して 回 を挿入することを行う. これによって に一致させることができる.
この同値性から の Run Length 圧縮を求め, それらが条件を満たすかどうかを見れば良い. 時間計算量は である.