洛谷 P15305 『NFC-OI R1』序列贰 题解

P15305 『NFC-OI R1』序列贰

这是一个时间复杂度 \(O(T\log n)\) 的做法。

基础做法

\(f_{i,j,k,l}\) 表示前 \(i\) 位中,第 \(i\) 位是否填,第 \(i-1\) 位是否填,有几个孤立元,其中 \(j,k,l\in\{0,1\}\)。此处认为第 \(i\) 位有数,第 \(i-1\) 位没数时暂时不算孤立元。

对于孤立元数量不变的情况,

\[f_{i,0,0,j}\leftarrow f_{i-1,0,0,j}+f_{i-1,0,1,j} \]

\[f_{i,0,1,j}\leftarrow f_{i-1,1,1,j} \]

\[f_{i,1,0,j}\leftarrow f_{i-1,0,0,j}+f_{i-1,0,1,j} \]

\[f_{i,1,1,j}\leftarrow f_{i-1,1,0,j}+f_{i-1,1,1,j} \]

其中 \(j\in\{0,1\}\)

对于孤立元增加一个的情况,

\[f_{i,0,1,1}\leftarrow f_{i-1,1,0,0} \]

递推时的初始条件为:

\[f_{0,0,0,0}=1 \]

对于每个询问 \(n\),答案为

\[f_{n,0,0,1}+f_{n,0,1,1}+f_{n,1,0,0}+f_{n,1,1,1} \]

时间复杂度 \(O(T+n)\)

以下是清晰完整的式子(等号而非贡献形式):

\[f_{i,0,0,0}=f_{i-1,0,0,0}+f_{i-1,0,1,0} \]

\[f_{i,0,0,1}=f_{i-1,0,0,1}+f_{i-1,0,1,1} \]

\[f_{i,0,1,0}=f_{i-1,1,1,0} \]

\[f_{i,0,1,1}=f_{i-1,1,0,0}+f_{i-1,1,1,1} \]

\[f_{i,1,0,0}=f_{i-1,0,0,0}+f_{i-1,0,1,0} \]

\[f_{i,1,0,1}=f_{i-1,0,0,1}+f_{i-1,0,1,1} \]

\[f_{i,1,1,0}=f_{i-1,1,0,0}+f_{i-1,1,1,0} \]

\[f_{i,1,1,1}=f_{i-1,1,0,1}+f_{i-1,1,1,1} \]

矩阵快速幂做法

容易发现当 \(i\geq 1\) 时,\(f_{i,0,0,0}=f_{i,1,0,0}\)\(f_{i,0,0,1}=f_{i,1,0,1}\)。因此,令

\[h_{i,0}=f_{i,0,0,0} \]

\[h_{i,1}=f_{i,0,0,1} \]

\[h_{i,2}=f_{i,0,1,0} \]

\[h_{i,3}=f_{i,0,1,1} \]

\[h_{i,4}=f_{i,1,1,0} \]

\[h_{i,5}=f_{i,1,1,1} \]

可得

\[h_{i,0}=h_{i-1,0}+h_{i-1,2} \]

\[h_{i,1}=h_{i-1,1}+h_{i-1,3} \]

\[h_{i,2}=h_{i-1,4} \]

\[h_{i,3}=h_{i-1,0}+h_{i-1,5} \]

\[h_{i,4}=h_{i-1,0}+h_{i-1,4} \]

\[h_{i,5}=h_{i-1,1}+h_{i-1,5} \]

初始情况为 \(h_0=1\)

答案为 \(h_{n,0}+h_{n,1}+h_{n,3}+h_{n,5}\)

\[\mathbf{V}_i= \begin{pmatrix} h_{i,0} \\ h_{i,1} \\ h_{i,2} \\ h_{i,3} \\ h_{i,4} \\ h_{i,5} \end{pmatrix} \]

\[\mathbf{V}_1= \begin{pmatrix} 1 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \end{pmatrix} \]

设转移矩阵 \(\mathbf{M}\) 满足 \(\mathbf{M}\mathbf{V}_i=\mathbf{V}_{i+1}\),则

\[\mathbf{M}= \begin{pmatrix} 1 & 0 & 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ 1 & 0 & 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 & 1 \end{pmatrix} \]

\(\mathbf{V}_n=\mathbf{M}^{n-1}\mathbf{V}_1\)

读取对应行得到 \(h_{n,0},\,h_{n,1},\,h_{n,3},\,h_{n,5}\) 并累加即可得到答案。

使用矩阵快速幂可以以 \(O(T\log n)\) 的时间复杂度解决这个问题。

tips:因为当 \(i=0\) 时,\(f_{i,0,0,0}=f_{i,1,0,0}\) 不成立,所以它不满足转移,自然不满足矩阵转移,所以矩阵快速幂必须从 \(i=1\) 开始。通过计算可以得出 \(\mathbf{V}_1\)

posted on 2026-08-12 21:49  吴一鸣  阅读(9)  评论(0)    收藏  举报

导航