洛谷 P3270 - [JLOI2016]成绩比较(容斥原理+组合数学+拉格朗日插值)
考虑容斥。我们记 \(a_i\) 为钦定 \(i\) 个人被 B 神碾压的方案数,如果我们已经求出了 \(a_i\) 那么一遍二项式反演即可求出答案,即 \(ans=\sum\limits_{i=k}^{n-1}a_i(-1)^{i-k}\dbinom{i}{k}\),于是现在问题转化为怎样求 \(a_i\)。首先我们肯定要从另外 \(n-1\) 个学生中选出这 \(i\) 个,方案数 \(\dbinom{n-1}{i}\),其次,根据“碾压”的定义,这 \(i\) 个学生在任何一门学科中的分数都 \(\le\) B 神的分数,也就是说对于任何一门学科 \(j\),都有这 \(i\) 个学生属于被 B 神吊打的 \(n-r_j\) 个学生中,故对于每一门学科,被被 B 神吊打的 \(n-r_j\) 个学生中有 \(i\) 个学生是确定的,我们只需另从 \(n-i-1\) 个学生中选出 \(n-r_j-i\) 即可,方案数为 \(\dbinom{n-i-1}{n-i-r_j}\),再其次,对每门学科我们要确定有多少种可能的分数,我们枚举 B 神的分数 \(l\),那么对于被 B 神吊打的 \(n-r_j\) 个学生,每个人都有 \(l\) 种可能的分数,方案数 \(l^{n-r_j}\),对于吊打 B 神的 \(r_j-1\) 个学生,每个人都有 \(u_j-l\) 种可能的分数,方案数 \((u_j-l)^{r_j-1}\),因此我们有:
\]
由于这题 \(u_i\) 很大,直接算显然无法通过,不过注意到后面那坨东西 \(\sum\limits_{l=1}^{u_j}l^{n-r_j}(u_j-l)^{r_j-1}\) 是与 \(i\) 严格无关的,因此考虑将这东西预处理出来。怎么预处理呢,考虑将这东西用二项式定理展开变个形,具体来说:
&\sum\limits_{l=1}^{u_j}l^{n-r_j}(u_j-l)^{r_j-1}\\
=&\sum\limits_{l=1}^{u_j}l^{n-r_j}\sum\limits_{t=0}^{r_j-1}u_j^t(-l)^{r_j-1-t}\dbinom{r_i-1}{t}\\
=&\sum\limits_{t=0}^{r_j-1}u_j^t\dbinom{r_i-1}{t}\sum\limits_{l=1}^{u_j}l^{n-r_j}(-l)^{r_j-1-t}\\
=&\sum\limits_{t=0}^{r_j-1}u_j^t\dbinom{r_i-1}{t}(-1)^{r_i-1-t}\sum\limits_{l=1}^{u_j}l^{n-1-t}
\end{aligned}
\]
芜湖~好了,前面枚举复杂度显然不会爆,后面那东西是自然数 \(k\) 次幂之和的形式,可以拉格朗日插值求出,于是复杂度就降到了 \(n^2m\),可以通过此题。
const int MAXN=100;
const int MOD=1e9+7;
int qpow(int x,int e){
int ret=1;
for(;e;e>>=1,x=1ll*x*x%MOD) if(e&1) ret=1ll*ret*x%MOD;
return ret;
}
int n,m,k,u[MAXN+5],r[MAXN+5],s[MAXN+5],f[MAXN+5],fac[MAXN+5],ifac[MAXN+5];
void init_fac(int mx){
for(int i=(fac[0]=ifac[0]=ifac[1]=1)+1;i<=mx;i++) ifac[i]=1ll*ifac[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=mx;i++) fac[i]=1ll*fac[i-1]*i%MOD,ifac[i]=1ll*ifac[i-1]*ifac[i]%MOD;
}
int binom(int n,int k){
if(n<0||k<0||n<k) return 0;
return 1ll*fac[n]*ifac[k]%MOD*ifac[n-k]%MOD;
}
int sum[MAXN+5],pre[MAXN+5],suf[MAXN+5];
int calc(int n,int k){
for(int i=1;i<=k+1;i++) sum[i]=(sum[i-1]+qpow(i,k))%MOD;
pre[0]=n;for(int i=1;i<=k+1;i++) pre[i]=1ll*pre[i-1]*(n-i+MOD)%MOD;
suf[k+2]=1;for(int i=k+1;~i;i--) suf[i]=1ll*suf[i+1]*(n-i+MOD)%MOD;
int ans=0;
for(int i=1;i<=k+1;i++){
int mul=1ll*sum[i]*pre[i-1]%MOD*suf[i+1]%MOD*ifac[i]%MOD*ifac[k+1-i]%MOD;
if((k+1-i)&1) ans=(ans-mul+MOD)%MOD;else ans=(ans+mul)%MOD;
} return ans;
}
int main(){
scanf("%d%d%d",&n,&m,&k);init_fac(n+1);
for(int i=1;i<=m;i++) scanf("%d",&u[i]);
for(int i=1;i<=m;i++) scanf("%d",&r[i]);
for(int i=1;i<=m;i++) for(int l=0;l<r[i];l++){
int mul=1ll*binom(r[i]-1,l)*qpow(u[i],l)%MOD*calc(u[i],n-1-l)%MOD;
if((r[i]-1-l)&1) s[i]=(s[i]-mul+MOD)%MOD;else s[i]=(s[i]+mul)%MOD;
} int ans=0;
for(int i=k;i<n;i++){
int mul=binom(n-1,i);
for(int j=1;j<=m;j++) mul=1ll*mul*binom(n-i-1,n-r[j]-i)%MOD*s[j]%MOD;
if((i-k)&1) ans=(ans-1ll*mul*binom(i,k)%MOD+MOD)%MOD;
else ans=(ans+1ll*mul*binom(i,k)%MOD)%MOD;
} printf("%d\n",ans);
return 0;
}
洛谷 P3270 - [JLOI2016]成绩比较(容斥原理+组合数学+拉格朗日插值)的更多相关文章
- 洛谷 P5469 - [NOI2019] 机器人(区间 dp+拉格朗日插值)
洛谷题面传送门 神仙题,放在 D1T2 可能略难了一点( 首先显然对于 P 型机器人而言,将它放在 \(i\) 之后它会走到左边第一个严格 \(>a_i\) 的位置,对于 Q 型机器人而言,将它 ...
- 【bzoj4559】[JLoi2016]成绩比较(dp+拉格朗日插值)
bzoj 题意: 有\(n\)位同学,\(m\)门课. 一位同学在第\(i\)门课上面获得的分数上限为\(u_i\). 定义同学\(A\)碾压同学\(B\)为每一课\(A\)同学的成绩都不低于\(B\ ...
- P3270 [JLOI2016]成绩比较 容斥 数论 组合数学 拉格朗日插值
LINK:成绩比较 大体思路不再赘述 这里只说几个我犯错的地方. 拉格朗日插值的时候 明明是n次多项式 我只带了n个值进去 导致一直GG. 拉格朗日插值的时候 由于是从1开始的 所以分母是\((i-1 ...
- 洛谷 P5400 - [CTS2019]随机立方体(组合数学+二项式反演)
洛谷题面传送门 二项式反演好题. 首先看到"恰好 \(k\) 个极大值点",我们可以套路地想到二项式反演,具体来说我们记 \(f_i\) 为钦定 \(i\) 个点为极大值点的方案数 ...
- 洛谷 P1763 状态压缩dp+容斥原理
(题目来自洛谷oj) 一天,maze决定对自己的一块n*m的土地进行修建.他希望这块土地共n*m个格子的高度分别是1,2,3,...,n*m-1,n*m.maze又希望能将这一些格子中的某一些拿来建蓄 ...
- 洛谷 P3267 - [JLOI2016/SHOI2016]侦察守卫(树形 dp)
洛谷题面传送门 经典题一道,下次就称这种"覆盖距离不超过 xxx 的树形 dp"为<侦察守卫模型> 我们考虑树形 \(dp\),设 \(f_{x,j}\) 表示钦定了 ...
- 洛谷 P6276 - [USACO20OPEN]Exercise P(组合数学+DP)
洛谷题面传送门 废了,又不会做/ll orz czx 写的什么神仙题解,根本看不懂(%%%%%%%%% 首先显然一个排列的贡献为其所有置换环的乘积.考虑如何算之. 碰到很多数的 LCM 之积只有两种可 ...
- 洛谷 P4708 - 画画(Burnside 引理+组合数学)
洛谷题面传送门 神仙题 %%%%%%%%%%%%%%%%%%%% 题解搬运人来了 首先看到本质不同(无标号)的图计数咱们可以想到 Burnside 引理,具体来说,我们枚举一个排列 \(p\),并统计 ...
- bzoj4559[JLoi2016]成绩比较 容斥+拉格朗日插值法
4559: [JLoi2016]成绩比较 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 261 Solved: 165[Submit][Status ...
随机推荐
- “介绍一下自己吧”——记2020BUAA软工团队介绍和采访
写在前面 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 团队作业-团队介绍和采访 团队介绍 团队名称 我们是 BUAA软软软件工程小队 ,简称 ...
- hdu 2571 命运(水DP)
题意: M*N的grid,每个格上有一个整数. 小明从左上角(1,1)打算走到右下角(M,N). 每次可以向下走一格,或向右走一格,或向右走到当前所在列的倍数的列的位置上.即:若当前位置是(i,j), ...
- 『学了就忘』Linux基础 — 16、Linux系统与Windows系统的不同
目录 1.Linux严格区分大小写 2.Linux一切皆文件 3.Linux不靠扩展名区分文件类型 4.Linux中所有的存储设备都必须在挂载之后才能使用 5.Windows下的程序不能直接在Linu ...
- SpringBoot整合reids之JSON序列化文件夹操作
前言 最近在开发项目,用到了redis作为缓存,来提高系统访问速度和缓解系统压力,提高用户响应和访问速度,这里遇到几个问题做一下总结和整理 快速配置 SpringBoot整合redis有专门的场景启动 ...
- TCP/IP概述(网络互联与TCP/IP)
TCP/IP概述(网络互联与TCP/IP) 用IP实现异构网络互联 从用户角度如何实现异构网络互联: 从用户角度看,实现异构网络互联的关键点就是使各种网络类型之间的差异对自己透明.在TCP/IP协议中 ...
- [WPF] 玩玩彩虹文字及动画
1. 前言 兴致来了玩玩 WPF 的彩虹文字.不是用 LinearGradientBrush 制作渐变色那种,是指每个文字独立颜色那种彩虹文字.虽然没什么实用价值,但希望这篇文章里用 ItemsCon ...
- MySQL 查询语句(1)
一:创建数据库 1:CREATE DATABASE test; //创建数据库test 2:SHOW DATABASES: //查看目前数据库中可用的数据库,默认会有系统数据库 3:USE test; ...
- 2020美亚团体—Daniel篇
Daniel的桌上计算机的哈希值(SHA-256)是甚么? 通过取证大师计算 SHA-256值为 07DD40CF28603F421F3A09CD38F1C8AA40A2AC4BFB46ECF8299 ...
- Spring Boot 快速整合Swagger
一.前言 Spring Boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...
- Linux mem 2.5 Buddy 内存回收机制
文章目录 1. 简介 2. LRU 组织 2.1 LRU 链表 2.2 LRU Cache 2.3 LRU 移动操作 2.3.1 page 加入 LRU 2.3.2 其他 LRU 移动操作 3. LR ...