专栏文章

题解:AT_abc390_g [ABC390G] Permutation Concatenation

AT_abc390_g题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipyjith
此快照首次捕获于
2025/12/03 20:02
3 个月前
此快照最后确认于
2025/12/03 20:02
3 个月前
查看原文
sumisum_i 为位数为 ii 的所有数之和,totitot_i 为位数为 ii 的数的个数,mm 表示 nn 的位数。
F(x)=i=0m(1+10ix)toti\begin{aligned} F(x) = \prod_{i = 0}^{m} (1 + 10^{i}x)^{tot_i} \end{aligned}
考虑每一项的含义,(1+10ix)(1 + 10^{i}x) 中的 11 表示下方不选这个数的贡献,10ix10^{i}x 表示下方选了这个数的贡献,totitot_i 作为指数代表有 totitot_i 个位数为 ii 的数可供选择。
于是可以自然地得到 [xj]F(x)[x^j]F(x) 的含义为下方选了 jj 个数所产生的贡献之和。
考虑枚举位数为 ii 的数卡在中间产生的贡献:(注意我们钦定一个位数为 ii 的数卡在中间,所以有一个位数为 ii 的数不能自由选择,所以 F(x)F(x) 中要少乘一项 (1+10ix)(1 + 10^{i}x)
i=0msumij=1nj!(nj1)![xj]F(x)1+10ix\begin{aligned} \sum_{i = 0}^{m} sum_i \sum_{j = 1}^{n} j!(n - j - 1)![x^{j}]\frac{F(x)}{1 + 10^{i}x} \end{aligned}
注意到 m=lognm = log_n,所以 i,ji,j 可以暴力枚举,难点在于算出后面的多项式。
对后面的多项式取 ln\ln 可得
lnF(x)1+10ix=[j=0mtotjln(1+10jx)]ln(1+10ix)\begin{aligned} \ln\frac{F(x)}{1 + 10^{i}x} = \left[\sum_{j = 0}^{m}tot_{j}\ln(1 + 10^{j}x)\right] - \ln(1 + 10^{i}x) \end{aligned}
由泰勒展开
ln(1+x)=n(1)n1xnn\ln(1 + x) = \sum_n(-1)^{n - 1}\frac{x^{n}}{n}
故原式等于
[j=0mtotjk=0(1)k(10jx)kk]k=0(1)k(10ix)kk\begin{aligned} \left[\sum_{j = 0}^{m}tot_{j}\sum_{k = 0}^{\infty}(-1)^{k}\frac{(10^{j}x)^{k}}{k}\right] - \sum_{k = 0}^{\infty}(-1)^{k}\frac{(10^{i}x)^{k}}{k} \end{aligned}
因为取 [xj][x^j]jj 不会超过 nn,所以 kk 枚举到 nn 即可,这个式子可以 O(nm)O(nm) 计算,算完了再 exp\exp 回去即可。
这样总时间复杂度是 O(nm2+nlogn)=O(nlog2n)O(nm^{2} + n\log n) = O(n\log^{2}n)

评论

0 条评论,欢迎与作者交流。

正在加载评论...