AGC034 B - ABC
解法
ABC
がBCA
になるので、これが連鎖的に続くことを考えると、
AAA...BC
がBC...AAA
になる、もしくはA...BCBC
がBCBC...A
になる、の2通りです。
後者のパターンは、前者のパターンをBC
が連続している個数だけ繰り返す、とみなすことができるので、今後は無視します。
あとは、文字列を前から見ていき、BC
という文字列が現れたときに、その直前にしているA
の個数だけ操作が行われ、その後操作を行った部分の末尾が、操作を行った回数だけA
が連続している、ということになるので、文字目から順に見ていき、
今見ている文字とその1つ前が
BC
になっていない場合
1つ前の文字を調べ、A
なら、連続しているA
のカウントを1増やす。そうでなければカウントを0に戻す。今見ている文字とその1つ前が
BC
になっている場合
連続しているA
のカウントだけ操作を行えるので、答えに追加する。
カウントはそのまま据え置きとする。
次に見る文字は今見ている文字の2つ先とする。
という操作を繰り返していけば、答えを求めることができます。
感想
この問題と少し(?)似ています。
連鎖的に起こるパターンがどうなっているかを丁寧に見ることで、うまく数え上げの条件を探ることができました。
操作の順番が関係ないことを確認するのに時間がかかりました…