题意
有n个珍珠,每个珍珠可以取1~d中的一种颜色,求可以配成不少于m对的方案数(颜色相同的算一对)。
n<=1e9,d<=1e5
题解
由于n比较大,故从颜色上考虑。
容易发现,要求的就是出现次数为奇数的颜色种数<=n-m*2的方案数,考虑枚举出现次数为奇数的颜色种数,计算方案数时,因为要考虑顺序,于是将每种颜色看成一个指数型生成函数。
但要强制每个为奇数/偶数,列出来的式子过于复杂(只有某X姓神犇能化下去),于是考虑容斥,只限制奇数的颜色,这样能得到一个较为简单的式子:
f
[
k
]
(
至
少
k
个
颜
色
为
奇
数
的
方
案
数
)
=
C
(
d
,
k
)
∗
(
e
x
−
e
−
x
2
)
k
∗
e
d
−
k
[
x
n
]
∗
k
!
f[k](至少k个颜色为奇数的方案数)=C(d,k)*(\frac{e^{x}-e^{-x}}{2})^{k}*e^{d-k}[x^{n}]*k!
f[k](至少k个颜色为奇数的方案数)=C(d,k)∗(2ex−e−x)k∗ed−k[xn]∗k!
对它稍加化简,可以得到:
f
[
k
]
=
n
!
∗
C
(
d
,
k
)
2
k
∗
∑
i
=
0
k
C
(
k
,
i
)
∗
(
−
1
)
i
∗
e
(
d
−
i
∗
2
)
x
[
x
n
]
f[k]=\frac{n!*C(d,k)}{2^{k}} *\sum_{i=0}^{k}C(k,i)*(-1)^{i}*e^{(d-i*2)x}[x^{n}]
f[k]=2kn!∗C(d,k)∗∑i=0kC(k,i)∗(−1)i∗e(d−i∗2)x[xn]
对于没有生成函数知识的我,已经不做会了。对于
e
(
d
−
i
∗
2
)
x
e^{(d-i*2)x}
e(d−i∗2)x要求第n项系数,其实就是把
(
d
−
i
∗
2
)
x
(d-i*2)x
(d−i∗2)x带入x,于是得到一个卷积的形式,就可ntt解决。
求出f[k]后,用二项式反演容斥即可得到恰好k个颜色为奇数的方案数,这个过程也是一个卷积的形式,ntt即可。