2022.12.10
今天又是抄的 joke3579 闲话 .
小蓝有大量正方体的积木(所有积木完全相同),他准备用积木搭一个巨大的图形 .
小蓝将积木全部平铺在地面上,而不垒起来,以便更稳定。他将积木摆成一行一行的,每行的左边对齐,共 \(n\) 行,形成最终的图形 .
第一行小蓝摆了 \(H_{1}=w\) 块积木。从第二行开始,第 \(i\) 行的积木数量 \(H_{i}\) 都 至少比上一行多 \(L\),至多比上一行多 \(R\) (当 \(L=0\) 时表示可以和上一行的积木数量相同),即
\[H_{i-1}+L \leq H_{i} \leq H_{i-1}+R_{\circ} \]给定 \(x, y\) 和 \(z\), 请问满足以上条件的方案中,有多少种方案满足第 \(y\) 行的积木数量恰好为第 \(x\) 行的积木数量的 \(z\) 倍 .
\(1 \leq n \leq 5\times10^5\),\(1 \leq w \leq 10^{9}\),\(0 \leq L \leq R \leq 40\),\(1 \leq x<y \leq n\),\(0 \leq z \leq 10^{9}\) .
答案可以分成 \(1\dots x-1\),\(x\dots y\),\(y+1\dots n\) 三部分 .
\(y+1\dots n\) 的贡献是 \((R-L+1)^{n-y}\),后面计算 \(1\dots y\) 部分 .
根据组合意义,选一次的 OGF 即为 \(\displaystyle f(c)=\sum_{i=L}^Rc^i\) .
于是答案为:
其中求和因子 \(k\) 表示偏移后 \(x\) 行的方块个数,\(z(w+(x-1)L+k)-w-k-(y-1)L\) 则为偏移后 \(y\) 行的方块个数 .
关于「偏移」的详细解释见 joke3579 闲话 .
这样有值的 \(k\) 只有 \(\Theta(n(R-L))\) 个,枚举求即可 .
现在问题变成求一行的 \(f^m(c)\) .
这个完全等价于求 \(\left(\dfrac{1-c^n}{1-c}\right)^m\),朴素实现是 \(\Theta(n\log n)\) 的,然而此处的 \(n\) 的范围是原题记号下 \(n(R-L)\) 级别的,无法通过 .
注意到 \(f^m\) 是 D-finite 的,这表明可以找到一个整式递推来描述它 .
具体的,考察
左右提取 \(c^k\) 项系数即可得到递推式,直接暴力递推即可,总时间复杂度 \(\Theta(n(R-L))\) .
我写了一个 85pts 的暴力 NTT 代码,joke3579 实现了 100pts 的线性递推 .
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16971533.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ