H - Incomplete Notes Editorial by hitonanode

別解

以下、記法は公式解説と同様です。

長さ \(M\) の乱数列 \(R\) をとり、長さ \(N - M + 1\) の数列 \(f, g\)

\[ f_i = \sum_{j=1}^M \mathbf{1}(A_{i + j - 1} > 0) B_j R_j, \]

\[ g_i = \sum_{j=1}^M A_{i + j - 1} \mathbf{1}(B_j > 0) R_j \]

で定めると、 \(i\) が条件を満たすとき、 \(R\) の取り方によらず \(f_i / g_i\) の値が一定となるか \(f_i = g_i = 0\) となります。したがって何度か \(R\) を取り直して \(f\)\(g\) を計算し、\(f_i / g_i\) の値が不変となる \(i\) の個数を求めれば良いです。こちらの解法も計算量のボトルネックは \(f\)\(g\) の計算のための FFT (NTT) を用いた畳み込みで、想定計算量は \(O(N \log N)\) です。

posted:
last update: