LOJ2026 JLOI/SHOI2016 成绩比较 组合、容斥

传送门


感觉自己越来越愚钝了qwq

先考虑从(n-1)个人里安排恰好(k)个人被碾压,然后再考虑如何分配分数,两者乘起来得到答案。

对于第一部分,可以考虑容斥:设(f_i)表示(i)个人被碾压,其他人随意分配是否被碾压的方案数,我们考虑所有比B成绩高的科目一定是由剩余的(N-1-i)个人构成,所以(f_i = prodlimits_{j=1}^M inom{N - 1 - i}{r_j - 1})。那么我们要求的这一部分的答案就是(inom{N-1}{k} sumlimits_{i=K}^{N-1} (-1)^{i-K} f_i inom{i}{K})

(悄悄说一句如果这里的容斥系数写成了((-1)^{i-K})竟然有90分)

再考虑第二问。我们如果对于所有科目枚举B的分数,那么可以得到答案为(prodlimits_{i=1}^M sumlimits_{j=1}^{u_i} j^{N-r_i} (u_i - j)^{r_i-1})。但是(u_i)太大而(N)很小,所以我们可以考虑枚举(N)个人总共出现的分数种数。又设(g_{i,j})表示对于第(i)个学科,有(j)种分数分配给(N)个人的方案数,那么(g_{i,j} = sumlimits_{k=1}^{j} k^{N-r_i} (j - k)^{r_i-1})

我们知道如果恰好出现了(j)种分数,那么它的方案数乘上(inom{u_i}{j})就可以贡献答案,但是(g_{i,j})显然求出的不只是出现(j)种分数的方案数,因为有可能某些分数没有出现,所以再次考虑容斥。设(h_{i,j})表示对于第(i)个学科,恰好有(j)种分数出现的方案数,那么(h_{i,j} = g_{i,j} - sumlimits_{k=1}^{j-1} inom{j}{k} h_{i,k})。这样就可以算出与上面(O(sum u_i))的式子结果相同的式子,而复杂度降为(O(m^2n))

代码

原文地址:https://www.cnblogs.com/Itst/p/11031783.html