Official

F - Minflip Summation Editorial by tatyam


小問題の答えは、\(T'\)\(1\) 文字目が 0 のとき、\(T'\) を前から順に見たときに 0 から 1 に変わった回数、\(T'\)\(1\) 文字目が 1 のとき、1 から 0 に変わった回数です。
そこで、

  • \(1\) 文字目が 0 で現在の文字が 0
  • \(1\) 文字目が 0 で現在の文字が 1
  • \(1\) 文字目が 1 で現在の文字が 1
  • \(1\) 文字目が 1 で現在の文字が 0
  • 現在見ている文字までの小問題の答え

\(5\) つの状態を持った行列累乗でこの問題を解くことができます。
?01 の重ね合わせと見ることができるので、? に対応する行列は、0 に対応する行列と 1 に対応した行列を足し合わせたものになります。
\(T\)\(2\) 文字目以降について行列を計算し、これに \(T\)\(1\) 文字目を入れると答えが求まります。
時間計算量は \(O(|S| + \log K)\) です。

回答例 (C++)

posted:
last update: