1 solutions

  • 1
    @ 2023-8-20 22:03:40

    若一手牌内恰有kk个天地顺,这些天地顺出现的位置共有Cn(c1)kkC_{n-(c-1)*k}^{k}种可能

    考虑剩余位置的方案数,可以先随便排,但这样可能产生新的天地顺,我们最后再使用递推减去多余方案

    设剩余位置中大小为ii的牌用了bib_i张,则剩余位置的方案数为

    b(nck)!ibi!=(nck)!b1ibi![ibi=nck]\sum_{b}{\frac{(n-c*k)!}{\prod_{i}{b_i!}}}=(n-c*k)!\sum_{b}{\frac{1}{\prod_{i}{b_i!}}[\sum_{i}{b_i=n-c*k}]}

    构造cc个生成函数,第ii个为:

    Gi(x)=j=0aik1j!xjG_i(x)=\sum_{j=0}^{a_i-k}{\frac{1}{j!}x^j}

    cc个函数相乘,则xnckx^{n-c*k}项的系数即b1ibi![ibi=nck]\sum_{b}{\frac{1}{\prod_{i}{b_i!}}[\sum_{i}{b_i=n-c*k}]}

    F(k)=Cn(c1)kkb(nck)!ibi!F(k)=C_{n-(c-1)*k}^{k}\sum_{b}{\frac{(n-c*k)!}{\prod_{i}{b_i!}}},即实现确定kk个天地顺,剩下位置乱排的方案数,接下来考虑如何减去重复计算的部分

    upper=min{mini=1cai,nc}upper=\min\{\min_{i=1}^{c}{a_i},\lfloor \frac{n}{c}\rfloor\},即天地顺数量的上限,此时F(upper)F(upper)即恰好upperupper个天地顺的方案数,因为剩余位置乱排也不可能产生新的天地顺

    假设已经计算出恰好j+1,j+2,,upperj+1,j+2,\cdots,upper个天地顺的方案数,考虑如何计算恰好jj个天地顺的方案数

    观察发现,每个恰好j+1j+1个天地顺的方案,对F(j)F(j)产生了Cj+1jC_{j+1}^{j}的贡献,每个恰好j+2j+2个天地顺的方案,对F(j)F(j)产生了Cj+2jC_{j+2}^{j}的贡献...

    于是有

    ansj=F(j)t=j+1upperCtjanstans_j=F(j)-\sum_{t=j+1}^{upper}{C_{t}^{j}\cdot ans_t}

    最后anskans_k即为答案

    时间复杂度O(n3c)O(n^3c),使用NTT加速则可优化至O(n2clogn)O(n^2c\log n)

    Information

    ID
    19
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    (None)
    # Submissions
    50
    Accepted
    6
    Uploaded By