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& ...
随机推荐
- Linux Mint安装Docker踩坑指南
我家的服务器选用的Linux Mint系统,最近安装Docker的时候踩了一些小坑,但是总体还算顺利. 我们都知道Linux Mint系统是基于Ubuntu的,说实话用起来感觉还是很不错的,安装Doc ...
- C++基础知识(1)
C语言是结构化编程语言(for循环.while循环.do while循环和if else语句),将低级语言的效率.硬件访问能力和高级语言的通用性.可移植性融合在一起. UNIX编译和链接 UNIX用C ...
- ContentProvider示例
http://hi.baidu.com/pekdou/item/b2a070c37552af210831c678 首先,我自己是各初学者,网上一些关于ContentProvider的例子也不少,我自己 ...
- 《Linux内核分析》第一周笔记 计算机是如何工作的
一.计算机是如何工作的? 1.存储程序计算机工作模型 1)冯诺依曼体系结构 学习研究计算机的基本概念.就是指存储程序计算机.所有的有计算功能的电子设备小到计算器,大到超级计算机核心部分都可以用这种体系 ...
- week6:个人博客作业
这周主要是参与团队编程的讨论 团队编程中发现很多问题: 1,每个人共同空闲的时间不好找 就我组来说,我是考研,每天晚上都要去外面上课,有的人在进行大创,,也有的像我一样在整考研的东西,还有的进行其他, ...
- beta 圆桌 7
031602111 傅海涛 1.今天进展 主界面微调,部分地方加入用户体验设计 2.存在问题 文档转化太久 3.明天安排 完成全部接口的交互 4.心得体会 文档转化优化不了 031602115 黄家雄 ...
- CentOS下面磁盘扩容处理
1. 给虚拟机增加一块硬盘: 过程不表 2. 增加了硬盘之后需要重启一下 查看磁盘 ls /dev/sd* 3. 使用 gdisk 处理磁盘 注意 这里面fdisk 貌似没法处理成 LVM 必须使用 ...
- 常用的cpl 命令 运行直接打开控制台的简单方法
转载百度百科 工作中处理 windows机器 有时候 打开 网路修改ip地址特别繁琐,所以找了下 快速打开一些简单的控制台 能提高工作效率. (Control Panel extension) ...
- OneZero第三次站立会议(2016.3.23)
会议时间:2016年3月23日 13:00~13:15 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论并修改. 会议内容:以下为会议插图 1.界面原型方面,夏在统计界面中 ...
- Delphi 模式窗体返回值ModalResult的使用方法及注意事项(转)
1.基础知识简介: ModalResult是指一个模式窗体(form.showmodal)的返回值,一般用于相应窗体上按钮的ModalResult属性: 显示完窗体(关闭)后,会返回此属性预设的值做为 ...