传送门


感觉自己越来越愚钝了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. CH定理与线性递推

    才发觉自己数学差的要死,而且脑子有点浑浑噩噩的,学了一个晚上才学会 如果说的有什么不对的可以在下面嘲讽曲明 以下无特殊说明时,默认方阵定义在实数域上,用\(|A|\)表示\(A\)的行列式 特征值与特 ...

  2. mac 下的 tree 命令 终端展示你的目录树结构

    相信很多使用过Linux的用户都用过tree命令,它可以像windows的文件管理器一样清楚明了的显示目录结构.mac 下使用 brew包管理工具安装 tree 前提:安装了homebrew(安装指令 ...

  3. gitbook+git+typora 的使用过程

    Typora 下载地址:https://typora.io/ gitbook 第一步:安装 npm install -g gitbook-cli 第二步:使用 对要操作的文件夹执行命令 gitbook ...

  4. java生成HMACSHA256的方法

    data要加密的数据,key密钥 public static String HMACSHA256(String data, String key) throws Exception { Mac sha ...

  5. vue on-change 如果有循环的timer 则无限自动执行

    <div class="contract-class"> <Checkbox v-model="smallChecked" :on-chang ...

  6. 数据仓库DW、ODS、DM概念及其区别

    整体结构 在具体分析数据仓库之前先看下一下数据中心的整体架构以及数据流向   数据中心整体架构.png DB 是现有的数据来源,可以为mysql.SQLserver.文件日志等,为数据仓库提供数据来源 ...

  7. [C++] inline内联函数使用方法

    C++支持内联函数,目的是为了提高函数的执行效率,类似于C语言中的宏定义 内联函数在调用时将它在程序中的每个调用点展开,不用额外分配栈空间 内联函数的定义在一个源文件中出现一次,但在多个源文件中可以同 ...

  8. SQLServer 截取函数 substring函数

    declare @name char(1000) --注意:char(10)为10位,要是位数小了会让数据出错 set @name='s{sss}fc{fggh}dghdf{cccs}x' selec ...

  9. JavaScript工具类(三):localStorage本地储存

    localStorage Web 存储 API 提供了 sessionStorage (会话存储) 和 localStorage(本地存储)两个存储对象来对网页的数据进行添加.删除.修改.查询操作. ...

  10. ffmpeg接收udp输入的h264文件流,推流到rtmp服务器

    ffmpeg -re -f h264 -i udp://192.168.5.49:10002 -vcodec libx264 -f flv rtmp://192.168.5.155/live/1