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& ...
随机推荐
- Java使用Redis学习笔记
如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动. Maven项目可以直接在pom.xml中加入jedis包驱动: <dependency ...
- win10系统安装web3js的正确方法
在安装web3的时候 用npm install web3 –save-dev 在win10系统下会一直安装不成功.后来换用了 cnpm install web3 –save-dev 安装时候报出:C ...
- JS高级程序设计学习笔记1
javascript产生的原因: 在拨号上网时代,表单数据必须发送到服务器端才能验证输入值得有效性,JavaScript的研发就是为了解决这个问题,以便在客户端就验证输入值的有效性. ECMAScri ...
- linux内核分析第三周
20135103王海宁 linux内核分析第三周 http://mooc.study.163.com/course/USTC-1000029000 按照课堂提供的方法,命令行一行行敲上去,我是手机缓 ...
- 《Linux内核设计与实现》第一、二章学习笔记
<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡 学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...
- Linux第五周学习总结——扒开系统调用的三层皮(下
Linux第五周学习总结--扒开系统调用的三层皮(下) 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- 第一章:帝国的余晖 AT&T公司
启示:自己的想法,有好的技术比什么都重要,一定要注意的是技术,不要贪小便宜,明白自己最先关心的的哪个事情. 书中内容:没有人能活两百岁,也没有公司能辉煌两百年,这就是规律,很难超越.
- ElasticSearch 2 (34) - 信息聚合系列之多值排序
ElasticSearch 2 (34) - 信息聚合系列之多值排序 摘要 多值桶(terms.histogram 和 date_histogram)动态生成很多桶,Elasticsearch 是如何 ...
- 异构数据库之间完全可以用SQL语句导数据
告诉你一个最快的方法,用SQLServer连接DBF 在SQLServer中执行 SELECT * into bmk FROM OpenDataSource( ‘Microsoft.Jet.OLEDB ...
- Java获取当前运行方法所在的类和方法名
很简单,直接看代码: public void showClassAndMethod() { System.out.println(this.getClass().getSimpleName() + & ...