零
什么叫「转化到拆分
m 为若干不超过
n 的正整数」?
什么叫「显然要将
a 做差分」?
「Ferrers 图辅助理解」怎么理解?
为什么一个人发呆?
谁是多项式高手?
好吧不魔怔了。
很多分拆数的问题都可以用 q-analog 的方法推导,与组合意义解法殊途同归——本题亦不例外。
一
直接考虑
bk 这一项对答案产生的贡献,设其为
gk,则:
gk=[xm]∑i≥0ixi([yk−1]∏j=0i1−yxj1)([yn−k]∏j=i∞1−yxj1)
则答案为
∑kbkgk。
这个 GF 的意义为:枚举第
k 项位置的值,计算此时的序列
a 有多少种 —— 前
k−1 个位置都不大于
i,而后
n−k 个位置都不小于
i。
利用 q-analog 的推导,我们设
P(x,y)=∏j=0i1−yxj1
做换元
y↦xy,则有
P(x,xy)=P(x,y)1−yxi+11−y
在等式两端同乘
(1−yxi+1) 并提取
[yk] 系数得到
xkpk−xi+kpk−1pk=pk−pk−1=1−xk1−xi+kpk−1
由此可以直接写出原式中
[yk−1]∏j=0i1−yxj1=∏j=1k−11−xj1−xi+j
故技重施,同样也能解出
[yn−k]∏j≥i1−yxj1=∏j=1n−k1−xjxi
现在就有
gk=[xm]∑i≥0ixi(∏j=1k−11−xj1−xi+j)(∏j=1n−k1−xjxi)
二
虽然把二元 GF 化简为一元,但其形式还不容易处理。可以看到连乘中可以提出
xi(n−k) 和其它与
i 无关的部分。
重点考虑化简
Hk(x)=∑i≥0ixi(n−k+1)∏j=1k−11−xj1−xi+j
看起来还是不好算,又该 q-analog 出手了。设
F(x,t)=∑i≥0ti∏j=1k−11−xj1−xi+j
这样在求出
t∂tF(x,t) 后,做换元
t↦xn−k+1 即可得到
Hk(x)。我们有结论
F(x,t)=∏j=0k−11−txj1
你应该也注意到了,这就是逆用了前一节的推导过程而已。现在可以算出
t∂t∂F(x,t)=F(x,t)∑j=0k−11−txjtxj
于是就得到了
Hk(x):
Hk(x)=(∏j=0k−11−xn−j1)∑j=0k−11−xn−jxn−j
gk=[xm](∏j=1n1−xj1)∑j=0k−11−xn−jxn−j
此时就比较容易计算了,把后面的和式拆开就得到了递推
gk+1=gk+[xm](∏j=1n1−xj1)1−xn−kxn−k
直接计算即可,对单个
k 计算此式的复杂度是
Θ(m/(n−k)),总复杂度为
Θ(mlogm)。不过此题模数不让跑 NTT,强行用任意模来做的常数也太大了。
当然,可以利用此题中数据的特殊性质避开 FFT。另外几篇题解中也说到了做法,这里还是提一下:
∏j=1n1−xj1≡(∏j=1∞1−xj1)(∏j=n+1m(1−xj))(modxm+1)
前一部分可以利用五边形数定理,以
Θ(m1.5) 的复杂度计算;后一部分把每一项暴力乘上去,复杂度是
Θ((m−n)2) 的。