ABC449G - Many Repunit Sum 2
定义 repunit 指每个位上都是 \(1\) 的数。给定 \(N\),\(M\),对满足以下条件的数计数。
- 可以被表示为 \(N\) 个长度至多为 \(M\) 的
repunit之和。
我们会发现长为 \(d\) 的 repunit \(=\frac19(10^d-1)\)。
若 \(x=\sum \frac19(10^{d_i}-1)\),那么 \(X=9x+N=\sum 10^{d_i}\),对这两者计数是等价的。
考虑 \(X\) 什么时候满足条件,设 \(X=k10^M+r\),\(S(r)\) 表示 \(r\) 的数位和。
由于所有数都 \(\le 10^M\),因此我们需要将 \(X\) 表示为至少 \(A(x)=k+S(r)\) 个 \(10^d\) 的和。
同时我们可以通过每次替换 \(10^d\) 为 \(10\times 10^{d-1}\) 增加额外 \(9\) 个数。
因此 \(X\) 满足题意的充要条件为:
- \(x\ge N\)
- \(A(x)\le N\)
- \(A(X)\equiv N\pmod 9\)。
因此我们可以枚举 \(A(x)\),然后枚举 \(S(r)\le A(X)\),对于每个 \(S(r)\) 均对应唯一的 \(k\)。
对于 \(x<N\) 的情况,不难发现每个 \(x\equiv9\pmod N\) 都会被算一次,那么在最后减去 \(\lfloor N/9\rfloor\) 即可。
那么我们记 \(C(s)\) 表示 \(S(x)=s\) 的 \(x\) 的个数, \(B(s)\) 为其前缀和,则有:
那么考虑 \(C\) 的生成函数 \(F(x)\):
到这里已经可以多项式快速幂 \(O(n\log^2)\) 解决,但是我们进一步推导:
考虑 \(B\) 的生成函数 \(G(x)\),满足 \(B\) 为 \(C\) 的前缀和,也即:
我们对两项分别用广义二项式定理展开:
相乘可得:
代入上面 \(Ans\) 的式子:
其中
只需预处理 \(\binom{M-1}i\) 及 \(\binom{M+i-1}i\) 即可 \(\mathcal O(N)\) 计算。
不要忘记 \(-\lfloor N/9\rfloor\) 哦。
本文来自博客园,作者:CuteNess,转载请注明原文链接:https://www.cnblogs.com/CuteNess/p/19719157

浙公网安备 33010602011771号