模拟题,复读一下 EI 老师的 营业日志。
题意:给出 \(n,m,u,v\),试计算:
\[[x^n]\prod_{i=1}^{m}\frac{1}{1-(ui+v)x}\bmod 998244353 \]其中 \(n\le 10^{18},m\le 5\times 10^5\)。
直接分治 NTT 算出分式,再套 bostan-mori 的话复杂度是 \(O(m\log m\log n)\) 的,难以通过。
考虑使用部分分式展开:也就是将原式写为:
\[\sum_{i=1}^{m}\frac{r_i}{1-(ui+v)x} \]的形式。
我们有比较机械的部分分式方法:
现在我们要对
\[\frac{P(x)}{Q(x)=\prod_{i=1}^{r}(1-a_ix)^{k_i}} \]部分分式。首先我们知道其等于:
\[\sum_{i=1}^{r}\frac{R_i(x)}{(1-a_ix)^{k_i}} \]其中 \(\deg R_i(x)\lt k_i\)。如果我们已经求得了这个形式,则计算某一项 \([x^t]\) 的值是容易的,即为:
\[\sum_{i=1}^{r}\sum_{j\le \deg R_i(x)}[x^{j}]R_i(x)\times a_i^{t-j}\dbinom{k_i+t-j-1}{t-j} \]现在考虑如何去求。
令 \(q_i(x)=(1-a_ix)^{k_i}\),也就是说 \(Q(x)=\prod_{i=1}^{r}q_i(x)\),注意到 \(q_i(x)\) 是两两互质的。
如果暴力通分,则得到:
\[P(x)=\sum_{i=1}^{r}\frac{R_i(x)Q(x)}{q_i(x)} \]而注意到:
\[P(x)\equiv \frac{R_i(x)Q(x)}{q_i(x)}\bmod q_i(x) \]因此:
\[R_i(x) = P(x)\times(\frac{Q(x)}{q_i(x)}\bmod q_i(x))^{-1}\bmod q_i(x) \]一般我们都会用到的是比较特殊的情况,例如本题。\(R_i\) 成为了常数。
首先 \(P(x)=1\),其次 \(q_i(x)=1-(ui+v)x\),这是一个一次多项式。
而多项式 \(F(x)\) 对 \((ax+b)\) 取模等价于代入它的根,也就是等价于求值 \(F(-\frac{b}{a})\)。
因此令 \(Q_i(x) = \prod_{j\neq i}\frac{1}{q_j(x)}\),则 \(R_i=Q_i(\frac{1}{ui+v})\)。
不妨来求 \(Q_i^{-1}(x)=\prod_{j\neq i}q_j(x)\),也就是:\(\prod_{j\neq i}[1-\frac{uj+v}{ui+v}]\) 。
注意到其也就是:\(\prod_{j\neq i}\frac{u(i-j)}{ui+v}\)。因此算一项 \(R_i\) 可以 \(O(\log)\) 取之。
然后整个题得到了解决。
代数手段的解决方法比较机械,但是没有这样的数学功底,该怎么办?
我们还有一个组合意义来解决这道题目,这个组合意义十分巧妙:
首先可以看成这样一个问题。我们有 \(n\) 个阶段,要从 \(n\) 个阶段里选出共 \(m\) 个数。初始你有 \(u+v\) 个数可选,每进入到下一个阶段,你就多出 \(v\) 个数可选。
我们随意考虑一个最终选出来的方案,发现难点在于无法有效的区分在哪一个数开始进入了下一阶段:如果我们直接认为第一天的 \(u+v\) 个数和第二天的 \(u+2v\) 个数全部相同固然可以区分,但是完全没有办法计算。
考虑这样一个事情:每次进入一个新的阶段的时候多了 \(v\) 个数可选。我们直接在这个时候,插入 \(v\) 个数之一,标识着进入了新阶段。这样我们的序列长度应该为 \(n+m-1\)。
然后说,每一个长度为 \(n+m-1\) 的新序列,就能唯一地对应回去一个旧方案。但是一个旧方案对应过来有 \(v^{m-1}\) 种方式。所以要除掉哦。
发现我们依旧无法计数:因为你要保证什么,第一次新增的 \(v\) 个人,出现在第二次新增的 \(v\) 个人之前,这样的事情。
我们忽略这样的限制,也即忽略阶段的顺序:就是说,有 \(m-1\) 组新增的数,每组各有 \(v\) 个。本来我们钦定了第一组的第一次出现位于第二组的第一次出现之前,现在我们删去这样的约束。最后根据对称性除掉 \((m-1)!\) 即可。
现在就可以计数了:相当于有 \(m\) 个组,第一组有 \((u+v)\) 个数字,以后的组都是 \(v\) 个数字。然后你要求 \(m\) 个组一共凑出来 \(n\) 个数字,这里是 egf 卷积的形式,然后要求第 \(2\sim m\) 组每组的数字都至少出现一次,这里直接容斥掉即可。
小练习:ABC241H Card Deck Score
\(2^n\) 容斥的部分是平凡的,然后变为计算:
\[[x^{m}]\prod_{i=1}^{n}\frac{1}{1-a_ix} \]相信大家现在都会 \(O(n^2+n\log m)\) 计算这个了。
注意到 \(R_i\) 可以预处理出来,所以更严格的复杂度是 \(O(n^2+n2^n\log m)\)。不过也不需要这个优化。
就这?
标签:frac,log,一个,sum,个数,ui,计数问题,prod From: https://www.cnblogs.com/Cry-For-theMoon/p/17966158