P3773 [CTSC2017] 吉夫特 - 洛谷
昨天的残存内容,一道非常优雅且神奇的卢卡斯定理的应用。
它告诉了我们,卢卡斯定理除了屎以外,还有一个和 OI 关联性很高的用法,即将组合数转化为和 p 进制相关的内容:
在上述推导中,可以发现其中每一项都带上了 \bmod p,即将每一项都限制在了 p 以内,即转化到了 p 进制。
在本题中,p=2,所以:
通过卢卡斯定理进行推导可以发现,问题转化为了遍历每个二进制位,我们又考虑:\binom{1}{1}=1,\binom{1}{0}=1,\binom{1}{1}=1,\binom{0}{1}=0。
1 怎么乘不变,影响答案的只有 0,所以问题转化为遍历二进制位,看看是否存在 n 的某一位是 0,而 m 的那位是 1 的情况,如果有则说明不贡献答案。
DP 即可。
OI 应该删除数论。
P3390 【模板】矩阵快速幂 - 洛谷
对于两个矩阵 A,B,如果其大小分别为 a \times b 和 b \times c,可以计算出一个新矩阵 C,其大小为 a \times c,其计算公式为:
矩阵想要进行乘法运算,必须满足前者的列数等于后者的行数,且 A \times B 在定义上不等于 B \times A。
在本题中,需要进行快速幂运算,直接通过重载矩阵结构体的乘法运算符,再搭配普通的快速幂即可解决。
P1962 斐波那契数列 - 洛谷
如果你不会矩阵加速推斐波那契数列,那么你只能度过一个相对失败的人生。
我们考虑对于 F_n=F_{n-1}+F_{n-2},所以应该有一个矩阵 base 使得
因为 F_n=1 \times F_{n-1} + 1 \times F_{n-2},F_{n-1} = 1 \times F_{n-1} + 0 \times F_{n-2},所以 base 的第一、二列应该分别是 \begin{bmatrix} 1 \\ 1 \end{bmatrix},\begin{bmatrix} 1 \\ 0 \end{bmatrix},得到 base 为 \begin{bmatrix} 1 & 1 \\ 1 & 0\end{bmatrix}。
从 F_2=1 开始,每一次的 F_n 都可以通过乘一次 base 得到 F_{n+1},所以只需要定义 F_2=F_1=1,对其进行 n-2 次矩阵快速幂即可得到答案。