Part1
看到这个题目会想起一个弱化版的问题。
有(n)种不同的球, 每种球有(a_i)个, 求有多少种排列球的方式,使得相邻的球的种类不相同。
(sum a_i leq 2 imes 10 ^5)。
这个问题需要考虑相邻的球构成的限制。考虑直接构造球的( ext{EGF})然后进行拼接。
考虑枚举一个颜色的选择的限制个数长度构造( ext{EGF})。可以如下构造。
这个式子的组合意义在于, 可以考虑从左往右考虑所有相邻的相同的点, 那么每一个相邻的位置就是一个限制。所以生成函数前面的组合数表示的意义是在这些限制里面选择(j)个限制打破然后构成当前的颜色段, 然后乘上容斥系数。直接把(F_i)做卷积即可得到答案。
Part2
现在考虑计算题目中要求的答案。此时我们仍然认为当前是在序列上计数。
然后你发现式子貌似并不能直接扩展过来。
然后再想想发现好像可以
设(f(x, y))表示把(x)个数切成(y)段的所有方案下的长度乘积和。
那么同样考虑构造( ext{EGF})。
组合意义是我们枚举这个颜色分成了多少段, 然后计数在多少种情况下这个颜色会分成(i)段。后面的容斥系数意义是每次枚举至多分成(j)段。由于统计答案是关于段数(打破限制数)的, 所以生成函数的指数与(j)相关。
那么直接相乘可以得到最后的多项式。
对于(f(x, y))是经典的不定方程解数问题。答案是(inom{x + y - 1}{2y - 1})。
Part3
考虑上环。
如果我们考虑让第一种球放在开头,且末尾不是第一种球,那么这个环的权值可以对应到序列上。
那么可以用开头是第一种球的方案数减去开头和结尾都是的方案数。这个方案数可以通过向下平移颜色多项式实现。意义就是强行让多项式在选某个的时候自动带上钦定的部分。由于环循环是可贡献的, 最后答案需要乘一个(sum{a_i})。但是你发现这样的话每个第一种球的段都会计算一次答案, 所以在第一种颜色的球的生成函数里面除去一个(frac{1}{j})即可。
实现平移多项式的时候一定要注意不要把(EGF)的系数一起平移了!调了114514年对着题解看了114514年!