传送门


感觉自己越来越愚钝了qwq

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

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

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

再考虑第二问。我们如果对于所有科目枚举B的分数,那么可以得到答案为\(\prod\limits_{i=1}^M \sum\limits_{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} = \sum\limits_{k=1}^{j} k^{N-r_i} (j - k)^{r_i-1}\)

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

代码

LOJ2026 JLOI/SHOI2016 成绩比较 组合、容斥的更多相关文章

  1. bzoj4710: [Jsoi2011]分特产 组合+容斥

    4710: [Jsoi2011]分特产 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 289  Solved: 198[Submit][Status] ...

  2. 【BZOJ4559】[JLoi2016]成绩比较 动态规划+容斥+组合数学

    [BZOJ4559][JLoi2016]成绩比较 Description G系共有n位同学,M门必修课.这N位同学的编号为0到N-1的整数,其中B神的编号为0号.这M门必修课编号为0到M-1的整数.一 ...

  3. bzoj3622已经没有什么好害怕的了 dp+组合+容斥(?)

    3622: 已经没有什么好害怕的了 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1033  Solved: 480[Submit][Status][ ...

  4. BZOJ.4559.[JLOI2016]成绩比较(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 为什么已经9点了...我写了多久... 求方案数,考虑DP... \(f[i][j]\)表示到第\(i\)门课,还有\(j\)人会被碾压的方案数. 那么\[f[i][j]=\sum_{ ...

  5. BZOJ.4767.两双手(组合 容斥 DP)

    题目链接 \(Description\) 棋盘上\((0,0)\)处有一个棋子.棋子只有两种走法,分别对应向量\((A_x,A_y),(B_x,B_y)\).同时棋盘上有\(n\)个障碍点\((x_i ...

  6. BZOJ.2339.[HNOI2011]卡农(思路 DP 组合 容斥)

    题目链接 \(Description\) 有\(n\)个数,用其中的某些数构成集合,求构造出\(m\)个互不相同且非空的集合(\(m\)个集合无序),并满足每个数总共出现的次数为偶数的方案数. \(S ...

  7. bzoj3294[Cqoi2011]放棋子 dp+组合+容斥

    3294: [Cqoi2011]放棋子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 755  Solved: 294[Submit][Status] ...

  8. bzoj 4767: 两双手 组合 容斥

    题目链接 bzoj4767: 两双手 题解 不共线向量构成一组基底 对于每个点\((X,Y)\)构成的向量拆分 也就是对于方程组 $Ax * x + Bx * y = X $ \(Ay * x + B ...

  9. codeforces 571A--Lengthening Sticks(组合+容斥)

    A. Lengthening Sticks time limit per test 1 second memory limit per test 256 megabytes input standar ...

随机推荐

  1. 55、Spark Streaming:updateStateByKey以及基于缓存的实时wordcount程序

    一.updateStateByKey 1.概述 SparkStreaming 7*24 小时不间断的运行,有时需要管理一些状态,比如wordCount,每个batch的数据不是独立的而是需要累加的,这 ...

  2. shell脚本编程之变量的小用法

    变量赋值 ${parameter:-word}:如果parameter为空或未定义,则变量展开为"word":否则,展开为parameter的值: ${parameter:+wor ...

  3. javascript加密之md5加密

    原作地址:JavaScriptMd5 修改备用:JavaScriptMd5.rar

  4. pycharm plot独立窗口显示

    import matplotlib.pyplot as plt ... plt.show() 进行如下设置: File->Settings->Tools->Python Scient ...

  5. IDEA中设置自动build-改动代码,不用重启工程,刷新页面即可

    1.CTRL + SHIFT + A --> 查找Registry --> 找到并勾选compiler.automake.allow.when.app.running   2. FILE ...

  6. ubuntu之路——day17.1 卷积操作的意义、边缘检测的示例、filter与padding的关系、卷积步长

    感谢吴恩达老师的公开课,以下图片均来自于吴恩达老师的公开课课件 为什么要进行卷积操作? 我们通过前几天的实验已经做了64*64大小的猫图片的识别. 在普通的神经网络上我们在输入层上输入的数据X的维数为 ...

  7. Java JDBC利用反射技术将查询结果封装为对象

    1.JDBC将返回结果集封装成对象demo class JdbcDemo { /** * 获取数据库列名 * @param rs * @return */ private static String[ ...

  8. C# Newtonsoft.Json解析json字符串处理 - JToken 用法

    //*调用服务器API(获取可以处理的文件) //1.使用JSON通信协议(调用[待化验任务API]) String retData = null; { JToken json = JToken.Pa ...

  9. k8s记录-helm部署(九)

    helm 组件配置在 192.168.0.1 192.168.0.2 192.168.0.3 app 用户下操作tar xvf helm-v2.14.3-linux-amd64.tar.gzsudo ...

  10. Python的传递引用

    在研究神经网络的反向传播的时候,不解一点,就是修改的是神经网络的paramets,为什么影响内部的神经元(层),比如Affine层:因为除了创建的时候,使用params作为Affine层的构造函数参数 ...