bzoj千题计划270:bzoj4559: [JLoi2016]成绩比较(拉格朗日插值)
http://www.lydsy.com/JudgeOnline/problem.php?id=4559
f[i][j] 表示前i门课,有j个人没有被碾压的方案数
g[i] 表示第i门课,满足B神排名的分数安排方案数
g[i]的求法:
枚举B神这门课x分,则有n-Ri个人的分数<=x ,Ri-1个人的分数>x

Ui 上限是1e9,但是g[i] 是一个关于Ui 的n次多项式,所以可以用拉格朗日插值法来求
递推 f[i][j]:
假设f[i-1][w] 转移到了f[i][j],j>=w
前i-1门课没有被碾压,前i门课也一定没有被碾压
前i-1门课被碾压,前i门课可能继续被碾压,也可能不再被碾压
单看这一门课有Ri-1个人的成绩比B神高
但这Ri-1个人之前可能就有科目比B神高,已经不被碾压,这次成绩比B神高还是低都行
所以实际新增加了j-w个没有被碾压的,即这j-w个人 这一门 的成绩比B神高,之前的科目都比B神低
在已经没有被碾压的w个人中,还存在 Ri-1-(j-w) 个人的成绩比B神高
之前有n-w-1个人被碾压,所以新增情况的方案数为C(n-w-1,j-w)
后一种情况的方案数为C(w,Ri-1-j+w)

#include<cstdio>
#include <iostream> using namespace std; const int mod=1e9+; #define N 101 int C[N][N];
int U[N],rk[N];
int f[N][N];
int g[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} int get_C(int n,int m)
{
if(n< || m< || n<m) return ;
return C[n][m];
} void pre_C()
{
C[][]=;
for(int i=;i<=;++i)
{
C[i][]=;
for(int j=;j<=i;++j)
C[i][j]=(C[i-][j-]+C[i-][j])%mod;
}
} int Pow(int a,int b)
{
int res=;
for(;b;a=1LL*a*a%mod,b>>=)
if(b&) res=1LL*res*a%mod;
return res;
} int Langrange(int n,int r,int k)
{
for(int u=;u<=k;++u)
{
g[u]=;
for(int x=;x<=u;++x)
g[u]=(g[u]+1LL*Pow(u-x,r-)*Pow(x,k--r)%mod)%mod;
if(n==u) return g[u];
}
int fz=;
for(int i=;i<=k;++i) fz=1LL*fz*(n-i)%mod;
int fm,ans=;
for(int i=;i<=k;++i)
{
fm=n-i;
for(int j=;j<=k;++j)
if(i!=j) fm=1LL*fm*(i-j)%mod;
ans=(ans+1LL*fz*g[i]%mod*Pow(fm,mod-)%mod)%mod;
}
if(ans<) ans+=mod;
return ans;
} int main()
{
int n,m,k;
read(n); read(m); read(k);
for(int i=;i<=m;++i) read(U[i]);
for(int i=;i<=m;++i) read(rk[i]);
pre_C();
int G;
f[][]=;
for(int i=;i<=m;++i)
{
G=Langrange(U[i],rk[i],n+);
for(int j=;j<=n;++j)
{
for(int w=;w<=j;++w)
f[i][j]=(f[i][j]+1LL*f[i-][w]*get_C(w,rk[i]--j+w)%mod*get_C(n-w-,j-w)%mod)%mod;
f[i][j]=1LL*f[i][j]*G%mod;
}
}
printf("%d",f[m][n-k-]);
return ;
}
4559: [JLoi2016]成绩比较
Time Limit: 20 Sec Memory Limit: 256 MB
Submit: 366 Solved: 211
[Submit][Status][Discuss]
Description
Input
Output
仅一行一个正整数,表示满足条件的情况数模10^9+7的余数。
Sample Input
2 2
1 2
Sample Output
bzoj千题计划270:bzoj4559: [JLoi2016]成绩比较(拉格朗日插值)的更多相关文章
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj 4559 [JLoi2016]成绩比较——拉格朗日插值
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559 关于拉格朗日插值,可以看这些博客: https://www.cnblogs.com/E ...
- bzoj千题计划281:bzoj4558: [JLoi2016]方
http://www.lydsy.com/JudgeOnline/problem.php?id=4558 容斥原理 全部的正方形-至少有一个点被删掉的+至少有两个点被删掉的-至少有3个点被删掉的+至少 ...
- bzoj千题计划272:bzoj4557: [JLoi2016]侦察守卫
http://www.lydsy.com/JudgeOnline/problem.php?id=4557 假设当前到了x的子树,现在是合并 x的第k个子树 f[x][j] 表示x的前k-1个子树该覆盖 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
随机推荐
- 《Effective Java》学习笔记 ——异常
充分发挥异常的优点,可以提高程序的可读性.可靠性和可维护性. 第57条 只针对异常的情况才使用异常 第58条 对可恢复的情况使用受检异常,对编程错误使用运行时异常 * 如果期望调用者能够适当的恢复,使 ...
- <转>性能测试浅谈
本文主要针对WEB系统的性能测试.不涉及具体的执行操作,只是本人对性能测试的一点理解和认识. 性能测试的目的,简单说其实就是为了获取待测系统的响应时间.吞吐量.稳定性.容量等信息.而发现一些具体的性能 ...
- 关于使用单片机读取外部电压ADC阻抗匹配的问题
单片机的基准电压一般为3.3V,如果外部信号超过了AD测量范围,可以采用电阻分压的方法,但是要注意阻抗匹配问题.比如,SMT32的模数输入阻抗约为10K,如果外接的分压电阻无法远小于该阻值,则会因为信 ...
- Win环境 Android Studio使用Git 教程 ( 生成SSH key )
Github和码云都提供SSH协议,即用户可以用公钥认证方式连接到码云的SSH服务器.这就需要生成并部署SSH Key.下面就是我生成SSH Key的步骤,希望有所帮助: Git生成SSH key 在 ...
- vector读入指定行数但不指定列数的数字
#include <iostream> #include <vector> #include <cstdio> #include <cstring> # ...
- Qrcode生成二维码的参数总结 及最小尺寸的测试
Qrcode生成二维码,做过很多实验,探索最小规格的二维码到底是多少尺寸,和最高规格的二维码到底是多大尺寸.现在我总结总结: 有两种思路: 1.生成规格高的二维码,然后压缩到自己想要的尺寸的二维码.这 ...
- linux终端FQ
工具列表: shadowsocks - QT5 ss账号 proxychains 使用过程: 1.用shadowsocks - QT5登入ss,设置本机端口1080 2.proxychains的使用 ...
- Beta博客集合
Beta博客集合 Task1:beta冲刺准备 冲刺准备 Task2:Beta阶段冲刺合集 Beta阶段冲刺一 Beta阶段冲刺二 Beta阶段冲刺三 Beta阶段冲刺四 Beta阶段冲刺五 Task ...
- springmvc下载文件
Controller内代码: @RequestMapping(value = "/upload") public ResponseEntity<byte[]> uplo ...
- webpack打包使用
md创建文件夹 dir是遍历 如何安装node环境 首先下载安装包;安装好以后 使用cmd命令 建立一个新的文件夹(一定是英文的),然后cmd 命令中 cd 进入所安装的盘的地址. 在该文件夹下面 使 ...