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 ... 
随机推荐
- Controller中添加一个异步的Action
			给一段示例代码: public Task<ActionResult> TbReport(string code) { return Task.Factory.StartNew(() =&g ... 
- DB2创建视图view
			create view v_table1(col1,col2,col3...)--视图名(字段一,字段二,字段三...) as --后跟查询语句 select col1,col2,col3... fr ... 
- 从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序
			笔者学习嵌入式Linux也有一段时间了,很奇怪的是很多书讲驱动编程方面的知识,也有很多书将ARM9方面的知识,但是从以前51形式的(对寄存器直接操作,初始化芯片的功能模块)编程方法,和思维模式,变换为 ... 
- iOS进阶学习笔记
			熟练掌握C/C++/Objective-C/Swift语言: 熟悉Cocoa Touch(Foundation,UIKit).Objective-C中block,gcd,NSOperation等: 熟 ... 
- 洛谷 P3302 [SDOI2013]森林
			->题目链接 题解: #include<queue> #include<cstdio> #include<cstring> #include<iostr ... 
- CF434D Nanami's Power Plant
			就是切糕那道题,首先对每个函数连一串,然后\(x_u\leq x_v+d\)这个条件就是\(u\)函数\(i\)取值连向\(v\)函数\(i-d\)取值边权为inf,然后答案就是最小割了. #incl ... 
- 搭建 Guacamole 并解决各种坑和创建不了虚拟驱动器导致无法实现文件传输的方法
			系统类型版本:centos7 64位 结果:最终跑通了项目并且实现了虚拟驱动器的文件传输功能,添加了中文支持 反思总结: 先查看官方文档的Q&A,找找有没有类似的错误,然后如果有错误日志或者现 ... 
- CSS快速入门-基本选择器
			1.标签选择器 通过标签进行元素选择. <style> a { font-size:10px; color:red; } </style> 2.* *代表通配符,匹配任意标签, ... 
- Js_数组操作
			用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵 ... 
- Win7 64位操作系统连接HP 1010打印机完美解决方案
			工作的第一天就遇到问题,新电脑无法连接老式的HP1010打印机,64位Windows7系统无法连接32位XP网络共享打印机,而32位WIN7就可以. 这里分享个简单的解决方法: 先去下载 ... 
