zoukankan      html  css  js  c++  java
  • [CTS2019] 珍珠

    我感觉我开始沉迷推柿子了,有趣。

    一、题目

    点此看题

    其实求的是合法的方案数。

    二、解法

    (cnt_c) 为颜色 (c) 珍珠的个数,那么可以推出一个关于 (cnt_c) 奇偶性的柿子:

    [sum_{c=1}^dfrac{cnt_c}{2}geq m ]

    [sum_{c=1}^dfrac{cnt_c-cnt_c\%2}{2}geq m ]

    [sum_{c=1}^dcnt_c-cnt_c\%2geq 2m ]

    [n-sum_{c=1}^dcnt_c\%2geq2m ]

    [sum_{c=1}^dcnt_c\%2leq n-2m ]

    如果 $$n-2mgeq d$$ 那么答案是 (D^n),如果 (n-2m<0) 那么答案是 (0)

    (odd_i) 表示个数为奇数的颜色个数为 (i) 的方案数,(f_i) 表示钦定个数为奇数的颜色个数为 (i) 的方案数,那么根据二项式反演可以得到:

    [odd_i=sum_{jgeq i}(-1)^{j-i}{jchoose i}cdot f_j ]

    [odd_i=frac{1}{i!}sum_{jgeq i}frac{(-1)^{j-i}}{(j-i)!}cdot j!cdot f_j ]

    可以化为卷积的形式,把第一个数组的下标变成 (n-i) 即可,那么要在 (n+i) 处拿到答案。


    那么 (f) 是不是会好算一些呢?这里可以用指数型生成函数去算 (f),因为对于这 (n) 个随机变量,是不存在所谓标号的,有的只是颜色的差别,所以可以看成可重集的排列(用数学也可以很好地说明,其实就是很多个组合数相乘,展开之后就是可重集的排列)

    (EGF) 的卷积原理应该是去除原来的标号,再给新的标号,可重集的排列就是经典问题

    奇数的生成函数是 ({0,1,0,1,0,1....}) 也就是 (frac{e^x+e^{-x}}{2}),现在开始推柿子吧:

    [f_k={dchoose k}n![x^n](frac{e^x-e^{-x}}{2})^k(e^x)^{d-k} ]

    [f_k={dchoose k}frac{n!}{2^k}[x^n](e^x-e^{-x})^k(e^x)^{d-k} ]

    用二项式定理展开,枚举 (e^{x}) 的选取数量 (i)

    [f_k={dchoose k}frac{n!}{2^k}[x^n]sum_{i=0}^k{kchoose i}cdot e^{ix}cdot (-e^x)^{k-i}cdot e^{x(d-k)} ]

    [f_k={dchoose k}frac{n!}{2^k}[x^n]sum_{i=0}^k(-1)^{k-i}{kchoose i}cdot e^{(2i-2k+d)x} ]

    [f_k={dchoose k}frac{1}{2^k}sum_{i=0}^k(-1)^{k-i}{kchoose i}cdot (2i-2k+d)^n ]

    翻转一下,把 (i) 换成 (k-i)

    [f_k={dchoose k}frac{1}{2^k}sum_{i=0}^k(-1)^i{kchoose k-i}cdot(d-2i)^n ]

    [f_k=frac{d!}{2^kcdot(d-k)!}sum_{i=0}^kfrac{(-1)^i(d-2i)^n}{i!}cdotfrac{1}{(k-i)!} ]

    然后直接用卷积求吧!时间复杂度 (O(nlog n))

  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/C202044zxy/p/14526651.html
Copyright © 2011-2022 走看看