题意
对于一个长度为(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))。