• [做题记录-计数] P6151 [集训队作业2019] 青春猪头少年不会梦到兔女郎学姐


    Part1

    看到这个题目会想起一个弱化版的问题。
    (n)种不同的球, 每种球有(a_i)个, 求有多少种排列球的方式,使得相邻的球的种类不相同。
    (sum a_i leq 2 imes 10 ^5)
    这个问题需要考虑相邻的球构成的限制。考虑直接构造球的( ext{EGF})然后进行拼接。
    考虑枚举一个颜色的选择的限制个数长度构造( ext{EGF})。可以如下构造。

    [F_i = sum_{j = 1}^{a_i}inom{a_i - 1}{j - 1}(-1) ^ {a _i - j}frac{x^j}{j!}]

    这个式子的组合意义在于, 可以考虑从左往右考虑所有相邻的相同的点, 那么每一个相邻的位置就是一个限制。所以生成函数前面的组合数表示的意义是在这些限制里面选择(j)个限制打破然后构成当前的颜色段, 然后乘上容斥系数。直接把(F_i)做卷积即可得到答案。

    Part2

    现在考虑计算题目中要求的答案。此时我们仍然认为当前是在序列上计数。
    然后你发现式子貌似并不能直接扩展过来。
    然后再想想发现好像可以
    (f(x, y))表示把(x)个数切成(y)段的所有方案下的长度乘积和。
    那么同样考虑构造( ext{EGF})

    [F = sum_{i = 1}^{a}f(a, i)sum_{j = 1}^iinom{i - 1}{j - 1}(-1)^{i - j}frac{x^j}{j!} ]

    组合意义是我们枚举这个颜色分成了多少段, 然后计数在多少种情况下这个颜色会分成(i)段。后面的容斥系数意义是每次枚举至多分成(j)段。由于统计答案是关于段数(打破限制数)的, 所以生成函数的指数与(j)相关。
    那么直接相乘可以得到最后的多项式。
    对于(f(x, y))是经典的不定方程解数问题。答案是(inom{x + y - 1}{2y - 1})

    Part3

    考虑上环。
    如果我们考虑让第一种球放在开头,且末尾不是第一种球,那么这个环的权值可以对应到序列上。
    那么可以用开头是第一种球的方案数减去开头和结尾都是的方案数。这个方案数可以通过向下平移颜色多项式实现。意义就是强行让多项式在选某个的时候自动带上钦定的部分。由于环循环是可贡献的, 最后答案需要乘一个(sum{a_i})。但是你发现这样的话每个第一种球的段都会计算一次答案, 所以在第一种颜色的球的生成函数里面除去一个(frac{1}{j})即可。
    实现平移多项式的时候一定要注意不要把(EGF)的系数一起平移了!调了114514年对着题解看了114514年!

  • 相关阅读:
    JS eval()小结
    纯JS的ajax实例
    js特效代码-鼠标样式
    JS typeof与instanceof的区别
    linux下网卡绑定
    KVM+VNC 虚拟机远程管理
    smokeping安装
    Python:字符串中引用外部变量的3种方法
    Python:模块学习——os模块
    Python:模块学习——sys模块
  • 原文地址:https://www.cnblogs.com/clover4/p/15317937.html
Copyright © 2020-2023  润新知