设颜色为 i 的珍珠有 ci 个,则 D∑i=1⌊ci2⌋≥mD∑i=1ci−cimod22≥mD∑i=1cimod2≤n−2m
若 n−2m≥D,答案为 Dn。
若 n−2m<0,答案为 0。
首先讲一个垃圾做法。
设 fi 表示恰有 i 个颜色为奇数的方案数,gi 表示钦点 i 个为奇数的方案数,则 gi=D∑j=i(ji)fj⟺fi=D∑j=i(−1)j−i(ji)gj
后者显然可以卷积处理。考虑计算 gi。
根据基本的 EGF 知识,有 gi=(Di)ni(ex)D−i=(Di)n!2i[xn]i∑j=0(ij)ejx(−e−x)i−je(D−i)x=(Di)n!2ii∑j=0(ij)(−1)i−j[xn]e(D−2i+2j)x=(Di)n!2ii∑j=0(ij)(−1)i−j(D−2i+2j)nn!=D!2i(D−i)!i∑j=01j!⋅(−1)i−j(D−2i+2j)n(i−j)!
两次卷积即可计算答案。时间复杂度 O(DlogD)。
为什么说这个做法垃圾?
真的有必要二项式反演吗?
实际上直接枚举奇数的个数并不难计算。
再进行各种生成函数推导不难得到一个 O(DlogDn) 做法,可以近似认为是 O(D)。
这里就不写了,因为鸽(
代码:
1 |
|