ARC059D アンバランス/Unbalanced
AtCoder Regular Contest 059 D アンバランス/Unbalanced
問題
与えられる文字列 において, 部分文字列 ( とする)が以下の条件を満たすとき, その位置を示せ。
の長さが 以上
の過半数が同じ文字
部分文字列は連続している
考察
部分点は ] の場合は O(n3) で全ての部分文字列を列挙して探索すればよいです。
次に満点回答を考えます。
満点回答では105を考える必要があるため、全列挙するO(n3)の解法は使えません。
ここで発想を、すべての部分文字列を調べる、から、条件を満たす部分文字列のパターンを考える、に転換させます。
では条件(長さ2以上で過半数の文字が同じ)を満たす文字列のパターンはどのようなものでしょうか?
小さいほう()から考えてみます。
同じ文字をX, X以外の文字をYとすると,
のとき , XとYで表せる文字列のパターンで条件を満たすのは,
XX
となります。同様に のとき
XXX, YXX, XYX, XXY
と被るものを取り除くと
XYX
のみになります。
の文字列は と から生成できるので, 考えるべきパターンは, と だけということに分かります。
以上より文字列 より , が等しいときに条件を満たすことがわかりました。
sample code:
Submission #3331532 - AtCoder Regular Contest 059
転換って書いたけど自明なのかという疑問