2022.12.10

今天又是抄的 joke3579 闲话 .

蓝桥杯 2021 国 A 积木

小蓝有大量正方体的积木(所有积木完全相同),他准备用积木搭一个巨大的图形 .

小蓝将积木全部平铺在地面上,而不垒起来,以便更稳定。他将积木摆成一行一行的,每行的左边对齐,共 \(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\) .

于是答案为:

\[\sum_{k\ge 0}[c^k]f^x(c)[c^{z(w+(x-1)L+k)-w-k-(y-1)L}]f^{y-x}(c) \]

其中求和因子 \(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 的,这表明可以找到一个整式递推来描述它 .

具体的,考察

\[\begin{aligned}\dfrac{\mathrm d}{\mathrm dc}f(c)&=m\left(\dfrac{1-c^n}{(1-c)^2}-\dfrac{nc^{n-1}}{1-c}\right)\left(\dfrac{1-c^n}{1-c}\right)^{m-1}\\&=m\left(\dfrac{1-c^n}{(1-c)^2}-\dfrac{nc^{n-1}}{1-c}\right)\left(\dfrac{1-c}{1-c^n}\right)f(c)\end{aligned} \]

左右提取 \(c^k\) 项系数即可得到递推式,直接暴力递推即可,总时间复杂度 \(\Theta(n(R-L))\) .

我写了一个 85pts 的暴力 NTT 代码,joke3579 实现了 100pts 的线性递推 .

posted @ 2022-12-10 14:22  Jijidawang  阅读(55)  评论(0编辑  收藏  举报
😅​