1 条题解
-
0
详细题解
1. 图的性质分析
首先对 进行质因数分解,设 ,其中 为互不相同的质数。那么 的任意约数 可以唯一地表示为一个指数向量 ,其中 ,并且 。
根据边的定义,两点 与 之间存在边,当且仅当它们的指数向量恰好在一个分量上相差 (即某个 ,其余分量相同)。并且边权值等于 (假设 的指数为 , 的指数为 ,且 )。
由于每一步只能改变一个维度的指数且变化量为 ,从顶点 (指数向量 )到顶点 (指数向量 )的任意路径,其步数必须等于 ,且该步数是路径长度的下界。因此我们只关心步数恰好等于该曼哈顿距离的路径。
2. 最小权值和与最优顺序
尽管步数固定,但不同顺序的边权之和不同。考虑我们要改变若干个质数的指数:有些需要减少(除法),有些需要增加(乘法)。设需要减少的指数差之和为 ,需要增加的指数差之和为 。
引理:在所有步数等于 的路径中,最小边权和可以通过先执行所有除法操作,再执行所有乘法操作达到。
简要证明:执行一次除法操作(减小某维度指数)时,该边的权值是当前其他维度“指数+1”的乘积。如果在做除法之前先做了某些乘法,那么其他维度的指数会变大,导致除法边的权值变大。反之,先做除法时,其他维度的指数保持较小的初始值,从而除法边权较小。乘法则无论如何都在除法之后,其权值无法被避免。因此先除后乘是最优顺序。而且,在除法步骤内部调换顺序,边权不变(因为边权与正在改变的维度指数无关,而其他维度指数尚未改变);乘法步骤内部亦同。
因此,任意一条最短路径,其除法步骤和乘法步骤的内部顺序可以任意排列,而两类步骤之间的顺序固定(先除后乘)。
3. 路径计数
假设我们固定了:先从 开始,连续执行 次除法,每次将某个 的维度的指数减 ;然后执行 次乘法,每次将某个 的维度的指数加 。
对于除法阶段,我们需要进行 步,其中有 步是沿着维度 进行的(若 ,否则 )。这些步骤可以任意排列,排列方式数为多重集的排列数:
同理,乘法阶段的排列方式数为:
其中 (若 ,否则为 )。
由于两阶段独立,总最短路径数量即为两者的乘积:
$$\text{Ans} = \frac{S_{\text{down}}!}{\prod d_i!} \times \frac{S_{\text{up}}!}{\prod m_i!} \pmod{998244353} $$特别地,当 时,,答案为 (空路径)。
4. 实现细节
-
预处理:
- 对 进行质因数分解。,使用 Pollard‑Rho 算法或优化过的试除法(只需试除到 左右)均可。得到质数列表 及其最大指数 。 最多不超过 。
- 预处理阶乘与阶乘逆元,上界为最大可能的 ,而 ,因此阶乘数组只需开到 左右即可。
-
处理询问:
对于每个询问 :- 计算 和 在每个质数 下的指数 和 。由于 都是 的约数,可以通过不断除以 得到指数。
- 计算 ,。
- 计算 ,。
- 若 且 ,输出 ;否则答案为:$$\text{fact}[S_d] \cdot \text{invfact}[S_m] \cdot \prod \text{invfact}[d_i] \cdot \prod \text{invfact}[m_i] \pmod{M} $$
-
复杂度:
质因数分解 或 ;每个询问 ,总 ,足以通过。
5. 模数
注意题目给定的模数为 ,这是常见的质数,阶乘逆元可直接用费马小定理计算。
-
- 1
信息
- ID
- 6453
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者