1 条题解
-
10
普及一下线性代数科技。
认为本题中数据组数 ,项数 。
矩阵
如下定义一个 行 列的矩阵 :
$$\begin{bmatrix}A_{1,1}&\dots&A_{1,m}\\\vdots&\ddots&\vdots\\A_{n,1}&\dots&A_{n,m}\end{bmatrix} $$分别为矩阵的行数和列数。矩阵 第 行第 列的元素被记作 。
称两个矩阵相等,当且仅当她们行数和列数相同,且每个位置上的元素相同。
矩阵乘法
定义
行 列的矩阵 和 行 列的矩阵 能进行矩阵乘法运算,当且仅当 。其结果为一个 行 列的矩阵 ,满足 。
结合律
由于本题的需要,文中只介绍行数和列数均为 的情况。
对于三个 行 列的矩阵 ,有 。
等式左右的运算结果都是 行 列的矩阵,因此只需要证明两个矩阵中对应位置的元素相等。我们有:
$$(A\times B)_{i,j}=\sum\limits_{k=1}^nA_{i,k}B_{k,j} $$$$\begin{aligned}(A\times B\times C)_{i,j}&=\sum\limits_{k=1}^n(A\times B)_{i,k}C_{k,j}\\&=\sum\limits_{k_1=1}^nC_{k_1,j}\sum\limits_{k_2=1}^nA_{i,k_2}B_{k_2,k_1}\\&=\sum\limits_{k_1=1}^n\sum\limits_{k_2=1}^nA_{i,k_2}B_{k_2,k_1}C_{k_1,j}\end{aligned} $$$$(B\times C)_{i,j}=\sum\limits_{k=1}^nB_{i,k}C_{k,j} $$$$\begin{aligned}[A\times (B\times C)]_{i,j}&=\sum\limits_{k=1}^nA_{i,k}(B\times C)_{k,j}\\&=\sum\limits_{k_1=1}^nA_{i,k_1}\sum\limits_{k_2=1}^nB_{k_1,k_2}C_{k_2,j}\\&=\sum\limits_{k_1=1}^n\sum\limits_{k_2=1}^nA_{i,k_1}B_{k_1,k_2}C_{k_2,j}\end{aligned} $$容易发现两个结果的和式之间的区别仅仅是交换求和顺序,因此 $(A\times B\times C)_{i,j}=[A\times (B\times C)]_{i,j}$。所以命题得证。
分配律
矩阵乘法 一般不具有分配律。
回到本题
记斐波那契数列为 。本题要求 。记 。根据斐波那契数列的定义 可以得到:
$$F_i\times \begin{bmatrix}0 &1\\1&1\end{bmatrix}=F_{i+1}$$那么 可以通过 乘以 次 得到。根据矩阵乘法的结合律,我们有:
$$F_n=F_0\times \begin{bmatrix}0 &1\\1&1\end{bmatrix}^n$$接下来记 。
快速幂
如果直接枚举一遍乘起来这篇题解就没有存在的必要了。记 的二进制表示中为 的位置依次为 ,则:
记 。考虑 ,那么我们就可以 次递推 。接下来把所有 乘起来即可得到 。再用 乘以 即可得到目标矩阵。最后输出第一行第一列的元素即可。
时间复杂度 。其中 为矩阵乘法复杂度,本题中可以认为是 。
光速幂
当 , 时,能不能再给力一点?
能的兄弟,能的。我们考虑一个阈值 ,则 可以表示成 ,其中 。
令 为 的上界。
我们考虑 。预处理 ,$H_i=h_B^i,i\in\left[1,\left\lfloor\dfrac{N}{B}\right\rfloor\right]$。那么 。这样单次查询只需要做一次矩阵乘法,时间复杂度为 。
至于预处理,时间复杂度为 。根据我们在数学必修一学过的均值不等式知识,可知当 时最优时间复杂度为 。
于是我们得到了一个时间复杂度为 $\mathcal{O}\left(\left(T+\sqrt N\right)\omega\right)$ 的做法。
信息
- ID
- 435
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 0
- 上传者