传送门

挺神仙的啊……

设\(f[i][j]\)为考虑前\(i\)门课程,有\(j\)个人被\(B\)爷碾压的方案数,那么转移为$$f[i][j]=\sum_{k=j}^{n-1}f[i-1][k]\times {k \choose k-j}\times {n-1-k \choose r[i]-1-(k-j)}\times g(i)$$

解释一下,就是考虑第\(i\)门课,枚举在这之前分比\(B\)爷高的人数\(k\),要从中选出\(k-j\)个使得他们这一门课的分数比\(B\)爷高,然后在剩下的\(n-1-k\)个人里选出\(r[i]-1-(k-j)\)个人使他们比\(B\)爷分数高

最后的\(g(i)\)表示对于第\(i\)门课程,把\(1\)到\(u[i]\)的分数分给\(n-1\)个人使得他们中比\(B\)爷分数高的人数为\(r[i]\)的方案数

可以枚举\(B\)爷的分数,得$$g[i]=\sum_{k=1}{u_i}k{n-r[i]}(u_i-k)^{r[i]-1}$$

然而\(u_i\)太大不好直接算,发现后面那东西是一个多项式,且多项式的次数为\(n-1\),所以可以用拉格朗日插值快速计算

//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
const int N=155,P=1e9+7;
inline int add(R int x,R int y){return x+y>=P?x+y-P:x+y;}
inline int dec(R int x,R int y){return x-y<0?x-y+P:x-y;}
inline int mul(R int x,R int y){return 1ll*x*y-1ll*x*y/P*P;}
int ksm(R int x,R int y){
R int res=1;
for(;y;y>>=1,x=mul(x,x))if(y&1)res=mul(res,x);
return res;
}
int C[N][N],f[N][N],u[N],r[N],g[N];
int n,m,k;
int Large(int d,int r){
fp(i,0,n){
g[i]=0;
fp(j,1,i)g[i]=add(g[i],1ll*ksm(j,n-r)*ksm(i-j,r-1)%P);
}if(d<=n)return g[d];
int res=0,ty=(n&1)?P-1:1,tmp=1;
fp(i,1,n)tmp=1ll*tmp*(d-i)%P*ksm(i,P-2)%P;
fp(i,0,n){
res=add(res,1ll*g[i]*ty%P*tmp%P);
tmp=1ll*tmp*(d-i)%P*ksm(d-i-1,P-2)%P*(n-i)%P*ksm(i+1,P-2)%P;
ty=P-ty;
}return res;
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read(),k=read();
fp(i,1,m)u[i]=read();
fp(i,1,m)r[i]=read();
fp(i,0,N-5){
C[i][0]=1;
fp(j,1,i)C[i][j]=add(C[i-1][j],C[i-1][j-1]);
}
f[0][n-1]=1;
fp(i,1,m){
int res=Large(u[i],r[i]);
fp(j,k,n-1){
fp(l,j,n-1)if(l-j<=r[i]-1)
f[i][j]=add(f[i][j],1ll*f[i-1][l]*C[l][l-j]%P*C[n-1-l][r[i]-1-(l-j)]%P);
f[i][j]=mul(f[i][j],res);
}
}printf("%d\n",f[m][k]);return 0;
}

P3270 [JLOI2016]成绩比较(拉格朗日插值)的更多相关文章

  1. bzoj 4559 [JLoi2016]成绩比较——拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559 关于拉格朗日插值,可以看这些博客: https://www.cnblogs.com/E ...

  2. P3270 [JLOI2016]成绩比较 容斥 数论 组合数学 拉格朗日插值

    LINK:成绩比较 大体思路不再赘述 这里只说几个我犯错的地方. 拉格朗日插值的时候 明明是n次多项式 我只带了n个值进去 导致一直GG. 拉格朗日插值的时候 由于是从1开始的 所以分母是\((i-1 ...

  3. 洛谷 P3270 - [JLOI2016]成绩比较(容斥原理+组合数学+拉格朗日插值)

    题面传送门 考虑容斥.我们记 \(a_i\) 为钦定 \(i\) 个人被 B 神碾压的方案数,如果我们已经求出了 \(a_i\) 那么一遍二项式反演即可求出答案,即 \(ans=\sum\limits ...

  4. BZOJ4559&P3270[JLoi2016]成绩比较

    题目描述 \(G\)系共有\(n\)位同学,\(M\)门必修课.这\(N\)位同学的编号为\(0\)到\(N-1\)的整数,其中\(B\)神的编号为\(0\)号.这\(M\)门必修课编号为\(0\)到 ...

  5. bzoj千题计划270:bzoj4559: [JLoi2016]成绩比较(拉格朗日插值)

    http://www.lydsy.com/JudgeOnline/problem.php?id=4559 f[i][j] 表示前i门课,有j个人没有被碾压的方案数 g[i] 表示第i门课,满足B神排名 ...

  6. BZOJ4599[JLoi2016&LNoi2016]成绩比较(dp+拉格朗日插值)

    这个题我们首先可以dp,f[i][j]表示前i个科目恰好碾压了j个人的方案数,然后进行转移.我们先不考虑每个人的分数,先只关心和B的相对大小关系.我们设R[i]为第i科比B分数少的人数,则有f[i][ ...

  7. bzoj 4559 [JLoi2016]成绩比较 —— DP+拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559 看了看拉格朗日插值:http://www.cnblogs.com/ECJTUACM-8 ...

  8. LG4781 【模板】拉格朗日插值 和 JLOI2016 成绩比较

    [模板]拉格朗日插值 题目描述 由小学知识可知,$n$个点$(x_i,y_i)$可以唯一地确定一个多项式 现在,给定$n$个点,请你确定这个多项式,并将$k$代入求值 求出的值对$998244353$ ...

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

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

随机推荐

  1. FFMPEG SDK流媒体开发2---分离.mp4等输入流音视频而且进行解码输出

    对于FFMPEG SDK  提供的Demuxing 为我们实现多路复用  提供了非常多方便,以下的案案例 实现的是 分离一个媒体文件的音频 视频流 而且解码输出 到  不同的文件里. 对于音频被还原回 ...

  2. EasyDarwin EasyClient开源流媒体播放器,支持多窗口显示

    EasyDarwin开源团队开源的EasyClient客户端将支持流媒体采集.编码.推送.播放.抓图.录像.Onvif 等全套功能(大家持续关注我们Github的commit),其中播放功能是开源流媒 ...

  3. moving from a host-centric infrastructure to a container-centric infrastructure

    https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/ Why do I need Kubernetes and what c ...

  4. JVM无法启动,jps无法运行,提示内存不足

    原因:系统设置中有设置了不允许over commit so,无法分配足够内存 /etc/sysctl.conf vm.overcommit_memory=1    或者sysctl vm.overco ...

  5. 第一个自定义开发的Arcgis地图

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. platform_set_drvdata()/platform_get_drvdata()/container_of()【转】

    本文转载自:http://blog.csdn.net/angle_birds/article/details/8443695 platform_set_drvdata(struct platform_ ...

  7. SCAU 1138 代码等式 并查集

    1138 代码等式[附加题] 该题有题解 时间限制:500MS  内存限制:65536K 提交次数:59 通过次数:21 题型: 编程题   语言: G++;GCC Description 一个代码等 ...

  8. Windows Server 2012 修改桌面图标

    在virtualbox 4.2.18中装了个Windows Server 2012 来体验下,结果发现桌面图标都不知道在哪改.在百度文库上找到了解决方法:http://wenku.baidu.com/ ...

  9. python把字典写入excel之一例

    直接上代码: # -*- coding: utf-8 -*- import xlsxwriter #生成excel文件 def generate_excel(expenses): workbook = ...

  10. div遮罩弹框口

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...