Description

题库链接( \(\text{bzoj}\) 不知道为什么过不了啊... \(\text{luogu loj}\) 都能过...就给 \(\text{luogu}\) 的链接了...)

共有 \(n\) 位同学, \(M\) 门必修课。一位同学在必修课上可以获得的分数是 \(1\) 到 \(U_i\) 中的一个整数。

如果在每门课上 \(A\) 获得的成绩均小于等于 \(B\) 获得的成绩,则称 \(A\) 被 \(B\) 碾压。在 \(B\) 神的说法中,共有 \(K\) 位同学被他碾压(不包括他自己)。

\(B\) 神在第 \(i\) 门必修课中排名为 \(R_i\) 。这里的排名是指:如果 \(B\) 神某门课的排名为 \(R\) ,则表示有且仅有 \(R-1\) 位同学这门课的分数大于 \(B\) 神的分数,有且仅有 \(N-R\) 位同学这门课的分数小于等于 \(B\) 神(不包括他自己)。

我们需要求出全系所有同学每门必修课得分的情况数,使其既能满足B神的说法,也能符合排名。这里两种情况不同当且仅当有任意一位同学在任意一门课上获得的分数不同。

计算出情况数模 \(10^9+7\) 的。

\(N\leq 100,M\leq 100,Ui\leq 10^9\)

Solution

由于只有 \(k\) 名同学被碾压,故要保证其余的 \(n-1-k\) 名同学至少有一门分数要高于他。

我们有 \(n-1\choose k\) 种方案选出被碾压的 \(k\) 个人,对于剩下的 \(n-1-k\) 个人,我们记 \(f_x\) 为至多有 \(x\) 个人满足至少一门分数高于他,那么 \(f_x=\prod\limits_{i=1}^m{x\choose R_i-1}\) 。再设 \(g_x\) 为恰有 \(x\) 个人满足至少一门分数高于他,显然我们要求的是 \(g_{n-k-1}\) 。

容易得到

\[f_x=\sum_{i=1}^x {x\choose i}g_i\]

由二项式反演,得到

\[g_x=\sum_{i=1}^x (-1)^{x-i}{x\choose i}f_i\]

那么

\[g_{n-k-1}=\sum_{i=1}^{n-k-1}(-1)^{n-k-1-i}{n-k-1\choose i}\prod_{j=1}^m{i\choose R_j-1}\]

不过这只考虑了合法的安排相对分数高低情况,还没有考虑具体分数的关系。

不妨记 \(S\) 为一种人员安排情况下不同的分数安排方法。

我们枚举他的分数得到

\[\begin{aligned}S&=\prod_{i=1}^m\sum_{j=1}^{U_i}j^{n-R_i}(U_i-j)^{R_i-1}\\&=\prod_{i=1}^m\sum_{j=1}^{U_i}j^{n-R_i}\sum_{k=0}^{R_i-1}(-1)^k{R_i-1\choose k}j^kU_i^{R_i-1-k}\\&=\prod_{i=1}^m\sum_{j=1}^{U_i}\sum_{k=0}^{R_i-1}j^{n-R_i+k}(-1)^k{R_i-1\choose k}U_i^{R_i-1-k}\\&=\prod_{i=1}^m\sum_{k=0}^{R_i-1}(-1)^k{R_i-1\choose k}U_i^{R_i-1-k}\sum_{j=1}^{U_i}j^{n-R_i+k}\end{aligned}\]

注意到 \(Q=\sum\limits_{j=1}^{U_i}j^{n-R_i+k}\) 中的 \(U_i\) 会很大,显然不能直接枚举,我们可以插值解决。预处理出 \(S\) 的复杂度是 \(O(mn^2)\) 的。

最终答案就是

\[{n-1\choose k}g_{n-k-1}S\]

Code

#include <bits/stdc++.h>
using namespace std;
const int N = 233+5, yzh = 1e9+7;int n, m, k, U[N], R[N];
int fac[N], ifac[N];
int prime[N], tot, isprime[N], f[N], s1[N], s2[N];int quick_pow(int a, int b) {int ans = 1;while (b) {if (b&1) ans = 1ll*ans*a%yzh;b >>= 1, a = 1ll*a*a%yzh;}return ans;
}
int C(int n, int m) {return 1ll*fac[n]*ifac[m]%yzh*ifac[n-m]%yzh; }
int lagrange(int *y, int k, int xi) {int ans = 0; ++k;s1[0] = xi, s2[k+1] = 1;for (int i = 1; i <= k; i++) s1[i] = 1ll*s1[i-1]*(xi-i)%yzh;for (int i = k; i >= 0; i--) s2[i] = 1ll*s2[i+1]*(xi-i)%yzh;for (int i = 0; i <= k; i++)(ans += 1ll*y[i]*(i == 0 ? 1 : s1[i-1])%yzh*s2[i+1]%yzh*ifac[i]%yzh*((k-i)&1 ? -1 : 1)*ifac[k-i]%yzh) %= yzh;return ans;
}
int getQ(int xi, int k) {tot = 0; memset(isprime, 1, sizeof(isprime));isprime[1] = 0; f[0] = 0, f[1] = 1;for (int i = 2; i <= k+1; i++) {if (isprime[i]) prime[++tot] = i, f[i] = quick_pow(i, k);for (int j = 1; j <= tot && i*prime[j] <= k+1; j++) {isprime[i*prime[j]] = 0, f[i*prime[j]] = 1ll*f[i]*f[prime[j]]%yzh;if (i%prime[j] == 0) break;}}for (int i = 1; i <= k+1; i++) (f[i] += f[i-1]) %= yzh;if (xi <= k+1) return f[xi];return lagrange(f, k, xi);
}
int getS() {int ans = 1;for (int i = 1; i <= m; i++) {int sum = 0;for (int k = 0; k <= R[i]-1; k++)if (k&1) (sum -= 1ll*C(R[i]-1, k)*quick_pow(U[i], R[i]-1-k)%yzh*getQ(U[i], n-R[i]+k)%yzh) %= yzh;else (sum += 1ll*C(R[i]-1, k)*quick_pow(U[i], R[i]-1-k)%yzh*getQ(U[i], n-R[i]+k)%yzh) %= yzh;ans = 1ll*ans*sum%yzh;}return ans;
}
void work() {scanf("%d%d%d", &n, &m, &k);fac[0] = fac[1] = ifac[0] = ifac[1] = 1;for (int i = 2; i < N; i++) ifac[i] = -1ll*yzh/i*ifac[yzh%i]%yzh;for (int i = 2; i < N; i++)ifac[i] = 1ll*ifac[i-1]*ifac[i]%yzh,fac[i] = 1ll*fac[i-1]*i%yzh;for (int i = 1; i <= m; i++) scanf("%d", &U[i]);for (int i = 1; i <= m; i++) scanf("%d", &R[i]);int S = getS(), ans = 0;for (int i = 1; i <= n-k-1; i++) {int sum = 1;for (int j = 1; j <= m; j++) sum = 1ll*sum*C(i, R[j]-1)%yzh;if ((n-k-1-i)&1) (ans -= 1ll*sum*C(n-k-1, i)%yzh) %= yzh;else (ans += 1ll*sum*C(n-k-1, i)%yzh) %= yzh;}ans = 1ll*ans*S%yzh*C(n-1, k)%yzh;printf("%d\n", (ans+yzh)%yzh);
}
int main() {work(); return 0; }

转载于:https://www.cnblogs.com/NaVi-Awson/p/9283669.html

[JLOI 2016]成绩比较相关推荐

  1. 又是一年圣诞-应届生的2016年

    又是一年圣诞-应届生的2016年 时光荏苒, 刚刚部门聚餐结束, 我在小窝里思考着这匆忙的一年, 觥筹交错间感概万千. 去年这个时候, 恰巧也是考研时节, 对,lz就是去年的考研族, 去年的这个时候, ...

  2. 2016计算机一级成绩,2016年江苏计算机一级成绩查询_无忧考网.docx

    2016年江苏计算机一级成绩查询_无忧考网 2016年江苏计算机一级成绩查询_无忧考网 篇一:2016年计算机一级上机操作试题及答案 小编为大家推荐以下的选择题及答案,希望能帮助大家通过计算机等级考试 ...

  3. 2016年中山市信息学竞赛暨全国信息学联赛成绩表(普及组)

    这一次比赛的成绩出来啦,考的还是不错的,至少近复赛了.加油! 2016年中山市信息学竞赛暨全国信息学联赛成绩表(普及组)   序号 姓名 性别 学校 年级 参赛语种 指导教师 成绩 32 徐熠伟 男 ...

  4. 2016年全国计算机一级成绩查询时间,2016年3月计算机一级考试成绩什么时候出来...

    原标题:2016年3月计算机一级考试成绩什么时候出来 2016年3月计算机一级考试成绩什么时候出来 2016年3月计算机一级考试成绩已经在5月25日进行公布,考生可以通过以下成绩查询入口进行查询. 点 ...

  5. 2021年衡水中学高考成绩查询,2016年衡水中学高考成绩出炉

    今日凌晨,2016河北省高考成绩出炉.2016河北文理高考状元均来自衡水中学.其中,理科状元孟祥熙,总分724.文科状元袁嘉玮,总分706. 据了解,这是该校四年内第三次包揽河北省文理科状元.此前,2 ...

  6. 2016版excel_Python使用openpyxl和pandas处理学生成绩Excel文件实用案例

    推荐图书:<Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷 京东.天猫.当当均已上架,可以选择自己常用平台搜索 ...

  7. 浙江大学计算机专业录取,2016年浙江大学计算机学院复试成绩及拟录取名单

    计算机学院2016年硕士研究生招生复试成绩与拟录取名单公示(3月17日更新) 编辑:wuzhihang时间:2016年03月16日访问次数:1907 现将计算机学院各专业统考生的拟录取名单公示如下,公 ...

  8. 计算机英语分班考试成绩,哈尔滨工业大学2016级博士英语分班考试成绩及分班名单...

    哈尔滨工业大学2016级博士英语分班考试成绩及分班名单 15B932018 16B327002 16B327003 16B327005 16B327006 16B327007 16B327012 16 ...

  9. 2021重庆江北中学高考成绩查询,江北中学2016年高考本科上线率87.3%

    江北中学2016年高考本科上线率87.3% 28日上午,从重庆市江北中学获悉,该校2016年高考捷报频传,文科类重点上线85人,居区委属重点中学第一,汪婷同学以609分获区委属重点中学第一名;理科重点 ...

最新文章

  1. Windows - cd 命令
  2. Bitcoin代码中的Boost signals(1)
  3. C++多态:多态实现原理剖析,虚函数表,评价多态,常见问答与实战【C++多态】(55)
  4. 开发可以复用的构件和利用可以复用的构件进行开发
  5. 呃... 写满数据的硬盘是否比空硬盘重?
  6. ES6 对正则表达式的扩展
  7. linux设备模型的主要功能,Linux设备模型(3)
  8. php商品评价代码,php商品对比功能代码分享
  9. npm安装vue-cli时速度慢,fetchMetadata经常卡住并报异常
  10. 2021-08-17 String to Integet atoi, ratate list
  11. LintCode Python 简单级题目 112.删除链表中的重复元素
  12. android nv21 nv12,直接进行nv21或者nv12的resize
  13. C语言基础级——标准输入和输出
  14. DM数据库安装、踩雷、解决办法
  15. 联想突围:老外主守、本土主攻
  16. 什么是奇异值分解(SVD)?
  17. 西门子ET200SP基座单元的区别与分类以及注意事项
  18. [FreeRtos]任务状态切换和优先级设置
  19. 小米米家空气净化器2S拆解
  20. 网络空间安全-密码学

热门文章

  1. [小笔记]TypeScript/JavaScript映射两组数据
  2. A study on ILC for linear discrete systems with single delay
  3. 网易python面试_网易游戏面试经验(一)
  4. Sql根据不同条件统计总数
  5. 自定义文件系统类加载器
  6. iText 中写Word RTF 文档 中文字体设置
  7. redis安装配置参考
  8. CentOS7.2部署KVM虚拟机
  9. tkinter 实现简单登录窗
  10. 项目部署,环境搭建(pip/ makefile)