zoukankan      html  css  js  c++  java
  • CF1528F

    题意

    对于一个长度为(n)的正整数序列({a_i}_{i=1}^n),定义其合法当且仅当存在一个长度为(n)的非负整数序列({b_i}_{i=1}^n),使得({a_i+b_i}_{i=1}^n)构成一个(n)阶排列。
    对于任意合法的序列({a_i}_{i=1}^n),一个长度为(K)的序列({c_i}_{i=1}^K),定义其合法当且仅当:(forall iin[1,K]),满足(a_{c_i}=a_{c_1})
    (nle 10^9,Kle 10^5)

    做法

    引理:序列({a_i}_{i=1}^n)合法当且仅当,有(n)个车位,第(i)个人想停的位置为(a_i),若已经存在车了,则走到下一个空位置。

    容易证明。

    这是经典的parking function问题,方法是构造一个环,有(n+1)个位置,令(a_iin[1,n+1]),这样总方案数为((n+1)^n),合法的概率为(frac{1}{n+1}),故合法方案数为((n+1)^{n-1})

    这里,(a_{c_1})是多少并不重要(在答案基础上乘上(n+1),由于最后还要除(n+1),所以根本不需要管),枚举其个数,有:

    [ans=sumlimits_{i=0}^n {nchoose i}i^Kn^{n-i} ]

    这是个经典问题,容易化简得到:

    [sumlimits_{j=0}^K egin {Bmatrix} K \ jend {Bmatrix}j!{nchoose j}(n+1)^{n-j} ]

    求一行的斯特林数容易做到(O(Klog K))

    故总复杂度为(O(Klog K))

  • 相关阅读:
    替代PhotoShop:GIMP图形编辑器的使用
    Matlab: 主函数和子函数间接传递变量
    代码管理:SVN的使用
    Python: 科学计算
    Python: 代码调试
    Latex: article模板
    Matlab: 程序优化和调试
    LibreOffice的使用技巧
    mysql--多表联合查询
    mysql--数据查询
  • 原文地址:https://www.cnblogs.com/Grice/p/14816501.html
Copyright © 2011-2022 走看看