杂题选记(math)

[ABC229H] Advance or Eat (超现实数)

[ABC300H] Fibonacci: Revisited (常系数齐次线性递推应用)

[AGC045D] Lamps and Buttons (组合数计算)

Solution:

首先固定策略:从前往后点,每次点亮一个置换环。

则此时合法排列满足:设第一个元素在 $[1, A]$ 且不完全在 $[1, A]$ 的置换环集合为 $P_1$,完全在 $[1, A]$ 的置换环集合为 $P_2$,则 $(A, n]$ 中的任意元素一定属于 $P_1$ 中的某个置换环,且 $P_1$ 中置换环的起点一定在 $P_2$ 中任意一个自环之前,且 $P_2$ 要么为空,要么一定存在一个自环。

先计算 $P_2$ 非空,此时考虑枚举 $P_2$ 的第一个自环的位置 $i$。

然后考虑枚举 $j$ 表示完全在 $[i + 1, A]$ 中的 $P_2$ 元素总环长,则可以组合数计算其分布。

考虑此时对 $[1, i - 1]$ 的限制是不能出现自环,则考虑容斥,钦定 $k$ 个位置是自环,容斥系数是 $(-1)^k$,那么其余位置任意填,即 $(i - k - 1)!$,考虑对 $[i + 1, n]$ 中未被统计的部分,它们的方案是只能并入前面的一个非自环中,则有贡献为 $(n - j - k - 1)^{\underline{n - i - j + 1}}$。

略微简化后有式子 $ans_i = \sum\limits_{k = 0}^{i - 2}\binom{i - 1}{k}(-1)^k(i - k - 1)(A-i)!\sum\limits_{j = 0}^{A - i} (n-(k+j+2))^{\underline{n-(A-i+k+2)}}$

注意到关于 $j$ 的求和式形如 $\sum\limits_{j = 0}^{N} (n - M)^{\underline{n - K}}$,且 $N, M, K \le A$,可以预处理。

$P_2$ 为空是一个类似上式的求和式,可以直接 $O(A^2)$ 计算。

总复杂度 $O(n + A^2)$。

[NOI2007] 生成树计数(线性代数)

Solution:

由于原题数据范围较小,状压矩乘做法也可通过,就不讲了。

考虑如果 $k \le 500$ 怎么做。

将原图的 Kirchhoff 矩阵列出来,则答案即其任一主子式的值。

考虑规定删去最后一行最后一列,则尝试先对其进行一些变换,此时这些变换只要满足不改变其主子式的值即可。

将存在形如 $-1, \cdots, -1, 2k, -1, cdots, -1$ 的行都移至矩阵顶部,则剩余部分位于第 $n - 2k + 1 \sim n$ 行,考虑用第 $1 \sim n - 2k$ 行对第 $n - 2k + 1 \sim n - k$ 行进行一些初等行变换。

类似高斯消元,对于第 $n - 2k + 1 \sim n - k$ 行中的每一行,我们尝试每次消去其最前的非零位,直至其非零位全部位于最后 $2k$ 列。

由于前 $n - 2k$ 行的非零位的形态都相同,事实上我们每次进行的初等行变换形式相同,则可以写成矩阵的形式来优化过程,且由于非零位只有 $2k + 1$ 个,所以矩阵边长仅有 $2k$。

则预处理行变换矩阵的 $n - 2k$ 次方可做到 $O(k^3 \log{n})$ 完成对第 $n - 2k + 1 \sim n - k$ 行的初等行变换。

则注意到此时最后 $2k$ 行的非零元素仅位于最后 $2k$ 列。

那么原矩阵的主子式的值等于前 $n - 2k$ 行前 $n - 2k$ 列组成的矩阵的行列式的值乘上后 $2k$ 行后 $2k$ 列的主子式的值。

而前半部分的矩阵是上三角矩阵,且主对角线上元素均为 $-1$,可以 $O(1)$ 求值,后半部分可以 $O(k^3)$ 求解。

注意最开始我们进行了一些行的交换,这些操作会有若干个 $-1$ 的贡献,别忘了算。

如果 $n \le 2k$ 上述做法会出错,但此时矩阵边长 $\le 2k$,直接求其主子式的值即可。

时间复杂度 $O(k^3 \log{n})$,复杂度瓶颈为矩阵快速幂。

注意到转移矩阵 $A$ 是稀疏矩阵,其非零元素个数为 $O(k)$ 级别,其与列向量相乘单次仅需 $O(k)$ 的复杂度,所以使用常系数齐次线性递推可做到 $O(k^3 + k^2 \log{k} \log{n})$。

posted @ 2024-06-03 18:57  ORzyzRO  阅读(46)  评论(0)    收藏  举报