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& ...
随机推荐
- 12、利用docker快速搭建Wordpress网站
一.准备工作 结构图: 用户访问页面,Nginx将请求进行转发,如果请求的是php页面,则通过FastCGI转发给后端php进行处理:如果非php页面,则直接返回静态页面. 关键点: mysql.ph ...
- 设计模式 笔记 迭代器模式 Iterator
//---------------------------15/04/26---------------------------- //Iterator 迭代器模式----对象行为型模式 /* 1:意 ...
- centos 7部署ELK
一.ELK介绍 Elasticsearch 是基于 JSON 的分布式搜索和分析引擎,专为实现水平扩展.高可用和管理便捷性而设计.Logstash 是动态数据收集管道,拥有可扩展的插件生态系统,能够与 ...
- github添加ssh连接用户
最近打算用flask写一个自己的博客网站,打算把代码放在GitHub上,使用ssh访问.记录下GitHub配置ssh用户的流程. 1.在本地电脑或云服务器上生成ssh公钥和私钥,window下可以进入 ...
- ace -- 语法高亮
Creating a Syntax Highlighter for Ace 给ace创建一个语法高亮 Creating a new syntax highlighter for Ace is extr ...
- Linux内核分析 笔记二 操作系统是如何工作的 ——by王玥
一.知识要点 1.计算机是如何工作的?(总结)——三个法宝 存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算 ...
- Linux第五周学习总结——扒开系统调用的三层皮(下
Linux第五周学习总结--扒开系统调用的三层皮(下) 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- Alpha版阶段项目总结
一,设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 针对铁道大学大学生,增加他们的社交范围.我们的软件定义很清楚.对典型用户和典型场景有清晰的描述 ...
- SDN交换机迁移2
关于迁移过程中迁移目标(被迁移的交换机和目标控制器)的选择 SDN中基于过程优化的交换机竞争迁移算法 通信学报 交换机:请求速率大于域内平均请求速率的交换机集合: 控制器:综合网络中时延.流量和控制器 ...
- 第二个Sprint ------第四、五、六、七天
27号.28号.29号有事回家,没能及时更新博客. 罗伟业:加减算术----乘除算式 返回一个完整正确(加减.乘除)的算式<考虑到低年级还没有完全掌握四则混合运算> 康取:四则混合运算 ...