先考虑这样的一个问题:有 (n) 种颜色的球,每种有 (b_i) 个,求满足相邻不同色的排列的方案数。CF840C On the Bench
考虑容斥,枚举有多少个违反了相邻不同色的限制,违反后可以将相邻同色的球看作一个整体,枚举有 (c_i) 段相邻,得:
[largeegin{aligned}
&sum_cleft(prod_{i=1}^n(-1)^{c_i}inom{b_i-1}{c_i}
ight)frac{(sum b_i-c_i )!}{prod(b_i-c_i)!} \
=&sum_cleft(prod_{i=1}^n(-1)^{b_i-c_i}inom{b_i-1}{c_i-1}
ight)frac{(sum c_i )!}{prod c_i!} \
end{aligned}
]
设 (f(a,b)) 为将 (a) 个球分为 (b) 段后,所有方案中长度之积的和,考虑组合意义,其为 (a+b) 划分为 (b) 个正整数后,每个数 (-1) 的乘积之和,那么就是先在 (a+b-1) 个位置中插 (b-1) 个隔板,划分为 (b) 段,然后再在每一段中选一个位置来插板,也就是奇数编号的隔板为划分每个数,偶数编号的隔板为划分每一段 ,得答案为 (inom{a+b-1}{2b-1})。
发现将 (f(a,b)) 和之前考虑的问题结合起来就是链的答案,得:
[large sum_bsum_cleft(prod_{i=1}^n(-1)^{b_i-c_i}inom{b_i-1}{c_i-1}f(a_i,b_i)
ight)frac{(sum c_i )!}{prod c_i!}
]
考虑每一种颜色的指数型生成函数:
[largeegin{aligned}
F_i(x)&=sum_cfrac{x^c}{c!}sum_b(-1)^{b-c}inom{b-1}{c-1}f(a_i,b) \
&=sum_cfrac{x^c}{c!}sum_b(-1)^{b-c}frac{(b-1)!}{(c-1)!(b-c)!}frac{(a_i+b-1)!}{(2b-1)!(a_i-b)!} \
&=sum_cfrac{x^c}{c!(c-1)!}(-1)^csum_{b geqslant c}^{a_i}(-1)^bfrac{(b-1)!}{(b-c)!}frac{(a_i+b-1)!}{(2b-1)!(a_i-b)!} \
&=sum_cfrac{x^c}{c!(c-1)!}(-1)^csum_{b geqslant 0}^{a_i-c}(-1)^{a_i-b}frac{(a_i-b-1)!}{(a_i-b-c)!}frac{(2a_i-b-1)!}{(2a_i-2b-1)!b!} \
end{aligned}
]
可以卷积计算 (F_i(x)),得答案为 (prodlimits_{i=1}^n F_i(x)),分治处理即可。
然后考虑环的情况,在开头为 (1) 且结尾不为 (1) 的情况统计答案,得其为开头为 (1) 的方案数减去开头结尾都为 (1) 的方案数,发现确定 (a) 个位置为 (1) 就是将 (F_1(x)) 向左平移 (a) 位。
对于周期为 (T) 的环,其对应 (T) 个不同的排列,那么该环应当被计算 (T) 次,设 (m=sum a_i) 为总长,得若一个环有 (b) 段 (1),则其会被算 (frac{b}{frac{m}{T}}) 次,那么在 (F_1(x)) 中除掉 (b),最后对答案乘 (m) 即可。