BZOJ4559 JLOI2016成绩比较(容斥原理+组合数学+斯特林数)
容斥一发改为计算至少碾压k人的情况数量,这样对于每门课就可以分开考虑再相乘了。剩下的问题是给出某人的排名和分数的值域,求方案数。枚举出现了几种不同的分数,再枚举被给出的人的分数排第几,算一个类似斯特林数的东西即可。后一部分与碾压几人是无关的,预处理一下,复杂度即为三方。当然和四方跑得也差不多快。
数据有些过水,容斥系数都错了还能有90。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define P 1000000007
#define N 210
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,k,a[N],r[N],C[N][N],S[N][N],S2[N][N],v[N],ans;
int ksm(int a,int k)
{
int s=;
for (;k;k>>=,a=1ll*a*a%P) if (k&) s=1ll*s*a%P;
return s;
}
int inv(int a){return ksm(a,P-);}
void pre(int id)
{
int s=,t=;
for (int i=;i<=n;i++)
{
s=1ll*s*inv(i)%P*(a[id]-i+)%P;t=;
for (int j=;j<=i;j++)
t=(t+1ll*S2[n-r[id]+][j]*S[r[id]-][i-j])%P;
v[id]=(v[id]+1ll*s*t)%P;
}
}
int g(int id,int k){return 1ll*v[id]*C[n--k][n-r[id]-k]%P;}
int f(int k)
{
int ans=C[n-][k];
for (int i=;i<=m;i++)
ans=1ll*ans*g(i,k)%P;
return ans;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4559.in","r",stdin);
freopen("bzoj4559.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read(),k=read();
for (int i=;i<=m;i++) a[i]=read();
int R=n;
for (int i=;i<=m;i++) R=min(R,n-(r[i]=read()));
C[][]=;
for (int i=;i<=;i++)
{
C[i][]=C[i][i]=;
for (int j=;j<;j++)
C[i][j]=(C[i-][j-]+C[i-][j])%P;
}
S[][]=;
for (int i=;i<=;i++)
for (int j=;j<=i;j++)
S[i][j]=(S[i-][j-]+1ll*S[i-][j]*j)%P;
for (int i=;i<=;i++)
{
int fac=;
for (int j=;j<=i;j++)
{
S2[i][j]=1ll*S[i][j]*fac%P;
fac=1ll*fac*j%P;
S[i][j]=1ll*S[i][j]*fac%P;
}
}
for (int i=;i<=m;i++) pre(i);
for (int i=k;i<=R;i++)
if (i-k&) ans=(ans-1ll*C[i][k]*f(i)%P+P)%P;
else ans=(ans+1ll*C[i][k]*f(i)%P)%P;
cout<<ans;
return ;
}
BZOJ4559 JLOI2016成绩比较(容斥原理+组合数学+斯特林数)的更多相关文章
- bzoj4559[JLoi2016]成绩比较 容斥+拉格朗日插值法
4559: [JLoi2016]成绩比较 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 261 Solved: 165[Submit][Status ...
- bzoj千题计划270:bzoj4559: [JLoi2016]成绩比较(拉格朗日插值)
http://www.lydsy.com/JudgeOnline/problem.php?id=4559 f[i][j] 表示前i门课,有j个人没有被碾压的方案数 g[i] 表示第i门课,满足B神排名 ...
- HDU 4045 Machine scheduling (组合数学-斯特林数,组合数学-排列组合)
Machine scheduling Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- P6620-[省选联考2020A卷]组合数问题【组合数学,斯特林数】
正题 题目链接:https://www.luogu.com.cn/problem/P6620 题目大意 给出\(n,x,p,m\)和一个\(m\)次多项式\(f\)求 \[\sum_{k=0}^nf( ...
- bzoj4559: [JLoi2016]成绩比较
感谢丁爷爷教我做这个题的后半部分. 首先,运用一发容斥原理,求出所有人与B神每门课分数相对关系的不同方案数. 这个似乎大(wo)家(lan)都(de)会(hui)了(yi),我就不说了,详见代码里的f ...
- BZOJ4559: [JLoi2016]成绩比较(dp 拉格朗日插值)
题意 题目链接 Sol 想不到想不到.. 首先在不考虑每个人的真是成绩的情况下,设\(f[i][j]\)表示考虑了前\(i\)个人,有\(j\)个人被碾压的方案数 转移方程:\[f[i][j] = \ ...
- 【BZOJ4559】[JLoi2016]成绩比较 动态规划+容斥+组合数学
[BZOJ4559][JLoi2016]成绩比较 Description G系共有n位同学,M门必修课.这N位同学的编号为0到N-1的整数,其中B神的编号为0号.这M门必修课编号为0到M-1的整数.一 ...
- 【组合数学:第一类斯特林数】【HDU3625】Examining the Rooms
Examining the Rooms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- 【BZOJ5093】图的价值(第二类斯特林数,组合数学,NTT)
[BZOJ5093]图的价值(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 单独考虑每一个点的贡献: 因为不知道它连了几条边,所以枚举一下 \[\sum_{i=0}^{n-1}C_{n-1 ...
随机推荐
- Java中 Vector的使用详解
Vector 可实现自动增长的对象数组. java.util.vector提供了向量类(Vector)以实现类似动态数组的功能. 创建了一个向量类的对象后,可以往其中随意插入不同类的对象,即不需顾及类 ...
- kubernetes 资源请求和限制
1. spec: containers: - name: example resources: requests: ...
- (转)CloudStack 安装及使用过程中常见问题汇总
CloudStack 安装及使用过程中常见问题汇总 在做工程项目中对CloudStack 安装及使用过程中常见的几个问题及如何解决做一个总结. 1.Windows XP虚拟 ...
- jqgrid 点击列头的超链接或按钮时,不触发列排序事件
接上篇文章:jqgrid 将列头设置为超链接或按钮 如果在列头设置了超链接或按钮,在点击超链接或按钮时会触发列的排序事件. 原由:点击超链接/按钮会触发排序的冒泡事件 解决方法:点击超链接/按钮时,阻 ...
- 一文让您全面了解清楚HBase数据库的所有知识点,值得收藏!
一.HBase基本概念:列式数据库 在Hadoop生态体系结构中,HBase位于HDFS(Hadoop分布式文件系统)的上一层,不依赖于MapReduce,那么如果没有HBase这种Nosql数据库会 ...
- 大数据入门第十八天——kafka整合flume、storm
一.实时业务指标分析 1.业务 业务: 订单系统---->MQ---->Kakfa--->Storm 数据:订单编号.订单时间.支付编号.支付时间.商品编号.商家名称.商品价格.优惠 ...
- Android应用安全之数据传输安全
Android软件通常使用WIFI网络与服务器进行通信.WiFi并非总是可靠的,例如,开放式网络或弱加密网络中,接入者可以监听网络流量:攻击者可能 自己设置WIFI网络钓鱼.此外,在获得root权限后 ...
- python利用beautifulSoup写爬虫
python BeautifulSoup模块的安装 安装包下载地址:http://www.crummy.com/software/BeautifulSoup/#Download 文档:http://w ...
- Express app.listen 函数了解
最近一直在学习如何用原生的 Node.js 来做一个网站.在写的同时也在学习 Express 源码. 一直觉得 Express 开启服务器的方法挺有趣的,就看了一下. 在 Express 运行的时候会 ...
- Bluedroid协议栈HCI线程分析
蓝牙进程中有多个线程,其中HCI 线程是负责处理蓝牙主机端和控制器的数据处理和收发的工作. 本篇文章就是分析一下该线程的数据处理流程. 1.跟HCI相关的接口 首先看看hci的相关的接口:在hci_l ...