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))

  • 相关阅读:
    [BZOJ3745][Coci2015]Norma
    [OJ#15]TR #2 画心
    [BZOJ3585][BZOJ3339]mex
    [OJ#63]树句节够提
    [LOJ#2255][BZOJ5017][Snoi2017]炸弹
    [LOJ#525]「LibreOJ β Round #4」多项式
    【字符编码】Java字符编码详细解答及问题探讨
    【Java基础】序列化与反序列化深入分析
    【目录】JVM目录
    【知识积累】随机数生成的几种方法
  • 原文地址:https://www.cnblogs.com/C202044zxy/p/14526651.html
Copyright © 2011-2022 走看看