洛谷P6151 [集训队作业2019] 青春猪头少年不会梦到兔女郎学姐
先考虑这样的一个问题:有 \(n\) 种颜色的球,每种有 \(b_i\) 个,求满足相邻不同色的排列的方案数。CF840C On the Bench
考虑容斥,枚举有多少个违反了相邻不同色的限制,违反后可以将相邻同色的球看作一个整体,枚举有 \(c_i\) 段相邻,得:
设 \(f(a,b)\) 为将 \(a\) 个球分为 \(b\) 段后,所有方案中长度之积的和,考虑组合意义,其为 \(a+b\) 划分为 \(b\) 个正整数后,每个数 \(-1\) 的乘积之和,那么就是先在 \(a+b-1\) 个位置中插 \(b-1\) 个隔板,划分为 \(b\) 段,然后再在每一段中选一个位置来插板,也就是奇数编号的隔板为划分每个数,偶数编号的隔板为划分每一段 ,得答案为 \(\binom{a+b-1}{2b-1}\)。
发现将 \(f(a,b)\) 和之前考虑的问题结合起来就是链的答案,得:
考虑每一种颜色的指数型生成函数:
可以卷积计算 \(F_i(x)\),得答案为 \(\prod\limits_{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\) 即可。