1 条题解
-
0
题目大意
我们有两种奥术宝石:
- 2型: 个核心,每个核心是 网格,用 骨牌铺满
- 3型: 个核心,每个核心是 网格,用 骨牌铺满
定义:
- :2型宝石,宽度 , 个核心的不同咒术数
- :3型宝石,宽度 , 个核心的不同咒术数
咒术: 个核心的填充方案互不相同的有序组合。
问题:给定 ,求
$$\mathrm{ans} = \frac{1}{r-l+1} \sum_{n=l}^r F(n,k) \quad (\text{或 } G(n,k)) $$结果对 取模。
第一步:理解 和 的组合意义
设 表示 网格的骨牌铺满方案数(2型), 表示 网格的骨牌铺满方案数(3型)。
那么:
- 从 种方案中选出 个互不相同的方案,有序排列,就是
- 同理 是从 种方案中选 个互不相同的方案有序排列
因此:
$$F(n,k) = a_n \cdot (a_n - 1) \cdots (a_n - k + 1) = \frac{a_n!}{(a_n - k)!} $$$$G(n,k) = b_n \cdot (b_n - 1) \cdots (b_n - k + 1) = \frac{b_n!}{(b_n - k)!} $$(当 时 ,同理 )
第二步:求 和 的递推式
2型宝石 网格铺骨牌
经典问题,递推关系:
即 是斐波那契数列:
具体:
3型宝石 网格铺骨牌
经典递推:
或者另一种形式:
其中 ( 为奇数时 )
但题目中 应该是任意正整数,这里可能 在 为奇数时无法铺满?样例中 对应 正确。
实际上标准递推是:
对于奇数 ,。
第三步:将 和 写成多项式形式
定义下降阶乘幂:
则:
$$F(n,k) = a_n^{\underline{k}}, \quad G(n,k) = b_n^{\underline{k}} $$我们可以将 展开为普通多项式:
其中 是第一类斯特林数(带符号)。
因此:
第四步:求和转化为线性递推数列求和
我们需要计算:
$$S = \sum_{n=l}^r F(n,k) = \sum_{j=0}^k s(k,j) \sum_{n=l}^r a_n^j $$(对 同理)
问题转化为:对每个 ,计算 。
第五步:利用线性递推数列的性质
对 (斐波那契数列)
满足线性递推:
特征方程:
对于线性递推数列, 也满足某个线性递推(根据 Cayley–Hamilton 定理),递推阶数至多 。
因此我们可以:
- 找到 的线性递推关系
- 用矩阵快速幂求前 项和
对 ( 铺砖数列)
满足:
特征方程:
同样, 也满足线性递推。
第六步:具体算法步骤
预处理:
- 计算斯特林数 对 取模,
- 对每个 ,找到 和 的线性递推关系
对每个询问 :
- 对 :
- 计算 (用矩阵快速幂求线性递推数列区间和)
- $ans = \frac{1}{r-l+1} \sum_{j=0}^k s(k,j) A_j \bmod 998244353$
第七步:处理大范围
由于 巨大,我们必须用矩阵快速幂来计算线性递推的区间和。
对于线性递推:
$$u_n = c_1 u_{n-1} + c_2 u_{n-2} + \dots + c_m u_{n-m} $$我们可以构造转移矩阵 ,使得:
$$\begin{bmatrix} u_n \\ u_{n-1} \\ \vdots \\ u_{n-m+1} \end{bmatrix} = M \cdot \begin{bmatrix} u_{n-1} \\ u_{n-2} \\ \vdots \\ u_{n-m} \end{bmatrix} $$并且前缀和 也可以通过扩展矩阵来递推。
第八步:实现细节
对 (斐波那契的幂):
斐波那契数列的 次幂的线性递推阶数 = (实际上更小,但上界是 )
我们可以用矩阵:
$$\begin{bmatrix} a_n^j & a_{n-1}^j & \dots & a_{n-j}^j \end{bmatrix} $$但更简单的方法:直接对向量 做矩阵快速幂得到 ,然后快速幂求 ?不行, 太大。
正确方法:利用 的线性递推性质, 也线性递推,用 Berlekamp–Massey 算法找到递推式,然后矩阵快速幂求和。
对 (3型铺砖的幂):
本身递推阶数=4, 的递推阶数 。
第九步:复杂度分析
- 斯特林数预处理:
- 对每个 ,矩阵大小 ,矩阵快速幂
- 总复杂度:
, 太大,需要优化。
实际上 的递推阶数 ,但 ,矩阵大小 ,,再乘 ,约 ,仍很大。
需要进一步优化:
- 利用斐波那契的闭形式(通项公式),其中 $\phi = \frac{1+\sqrt{5}}{2}, \psi = \frac{1-\sqrt{5}}{2}$
- 那么
- 二项展开:$a_n^j = 5^{-j/2} \sum_{t=0}^j \binom{j}{t} (-1)^t \phi^{n(j-t)} \psi^{nt}$
- 于是 $\sum_{n=l}^r a_n^j = 5^{-j/2} \sum_{t=0}^j \binom{j}{t} (-1)^t \sum_{n=l}^r (\phi^{j-t} \psi^t)^n$
这是一个等比数列求和,可以直接公式计算。
第十步:最终算法(对2型宝石)
- 预处理组合数和斯特林数
- 计算 $\phi = \frac{1+\sqrt{5}}{2}, \psi = \frac{1-\sqrt{5}}{2}$ 在模 下的值(可能需要扩域)
- 对每个 :
(注意处理公比为1的情况) 4.
对3型宝石, 也有闭形式(涉及 ),类似处理。
总结
本题的关键步骤:
- 将咒术数转化为下降阶乘幂
- 利用斯特林数展开为普通幂次和
- 利用线性递推数列的闭形式,将区间和转化为等比数列求和
- 模意义下处理无理数(扩域或找模平方根)
这样可以在 时间内处理每个询问,满足大数据要求。
- 1
信息
- ID
- 4496
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 1
- 上传者