[CTS2019]随机立方体(容斥+组合数学)
这题七次方做法显然,但由于我太菜了,想了一会发现也就只会这么多,而且别的毫无头绪。发现直接做不行,那么,容斥!
f[i]为至少i个极值的方案,然后这里需要一些辅助变量,a[i]表示选出i个三维坐标均不相同的i个极大值的方案数,g[i]表示i个极大的数任意一个至少有一维坐标相同的点的个数,h[i]表示g[i]的极值可以同时存在的方案数,那么有f[i]=C(nml,g[i])a[i]h[i](nml-g[i])!。
a[i]很容易求得,就是(∏(n-j)(m-j)(l-j))/i!,其中j∈[0,i),g[i]更好求,就是nml-(n-i)(m-i)(l-i)
然后要进行一些关于上升幂的运算,我这里打不出式子(因为太菜了不会LaTeX),所以就不打了。注意维护g[i]的前缀积,具体细节看code吧。
#include<bits/stdc++.h>
using namespace std;
const int N=5e6+,mod=;
int n,m,l,k,mn,ans,fac[N],inv[N],a[N],f[N],g[N],h[N],pre[N];
int calc(int x){return 1ll*(n-x)*(m-x)%mod*(l-x)%mod;}
int qpow(int a,int b)
{
int ret=;
while(b)
{
if(b&)ret=1ll*ret*a%mod;
a=1ll*a*a%mod,b>>=;
}
return ret;
}
int C(int a,int b){return 1ll*fac[a]*inv[b]%mod*inv[a-b]%mod;}
int main()
{
inv[]=inv[]=fac[]=;for(int i=;i<N;i++)inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for(int i=;i<N;i++)fac[i]=1ll*fac[i-]*i%mod,inv[i]=1ll*inv[i-]*inv[i]%mod;
int T;scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d",&n,&m,&l,&k);
mn=min(n,min(m,l));
a[]=h[]=pre[]=;
for(int i=;i<=mn;i++)a[i]=1ll*a[i-]*calc(i-)%mod;
for(int i=;i<=mn;i++)g[i]=(1ll*g[i-]+calc(i-)-calc(i)+mod)%mod;
for(int i=;i<=mn;i++)pre[i]=1ll*pre[i-]*g[i]%mod;
pre[mn]=qpow(pre[mn],mod-);
for(int i=mn;i;i--)pre[i-]=1ll*pre[i]*g[i]%mod;
for(int i=;i<=mn;i++)f[i]=1ll*a[i]*pre[i]%mod;
ans=;
for(int i=k;i<=mn;i++)
if((i-k)&)ans=(ans-1ll*C(i,k)*f[i]%mod+mod)%mod;
else ans=(ans+1ll*C(i,k)*f[i])%mod;
printf("%d\n",ans);
}
}
[CTS2019]随机立方体(容斥+组合数学)的更多相关文章
- [LOJ#3119][Luogu5400][CTS2019]随机立方体(容斥+DP)
		
https://www.cnblogs.com/cjyyb/p/10900993.html #include<cstdio> #include<algorithm> #defi ...
 - 2015 asia xian regional F Color (容斥 + 组合数学)
		
2015 asia xian regional F Color (容斥 + 组合数学) 题目链接http://codeforces.com/gym/100548/attachments Descrip ...
 - LOJ3119 CTS2019 随机立方体 概率、容斥、二项式反演
		
传送门 为了方便我们设\(N\)是\(N,M,L\)中的最小值,某一个位置\((x,y,z)\)所控制的位置为集合\(\{(a,b,c) \mid a = x \text{或} b = y \text ...
 - 题解-CTS2019随机立方体
		
problem \(\mathtt {loj-3119}\) 题意概要:一个 \(n\times m\times l\) 的立方体,立方体中每个格子上都有一个数,如果某个格子上的数比三维坐标中至少有一 ...
 - BZOJ2839:集合计数(容斥,组合数学)
		
Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007. ...
 - 【BZOJ4559】[JLoi2016]成绩比较 动态规划+容斥+组合数学
		
[BZOJ4559][JLoi2016]成绩比较 Description G系共有n位同学,M门必修课.这N位同学的编号为0到N-1的整数,其中B神的编号为0号.这M门必修课编号为0到M-1的整数.一 ...
 - 容斥 + 组合数学 ---Codeforces Round #317 A. Lengthening Sticks
		
Lengthening Sticks Problem's Link: http://codeforces.com/contest/571/problem/A Mean: 给出a,b,c,l,要求a+x ...
 - Luogu5400 CTS2019随机立方体(容斥原理)
		
考虑容斥,计算至少有k个极大数的概率.不妨设这k个数对应的格子依次为(k,k,k)……(1,1,1).那么某一维坐标<=k的格子会对这些格子是否会成为极大数产生影响.先将这样的所有格子和一个数集 ...
 - LOJ3120. 「CTS2019」珍珠 [容斥,生成函数]
		
传送门 思路 非常显然,就是要统计有多少种方式使得奇数的个数不超过\(n-2m\).(考场上这个都没想到真是身败名裂了--) 考虑直接减去钦点\(n-2m+1\)个奇数之后的方案数,但显然这样会算重, ...
 
随机推荐
- 关于javascript中this 指向的4种调用模式
			
this指向问题绝对可以排js 的top 5最难和最重点的问题,初学者常常搞不清楚this指向哪里,特别是学过java和c#的人,想当年俺也迷糊了好久,直到遇到蝴蝶书,主要是因为js和主流的面向对象语 ...
 - 实验吧Web-易-简单的sql注入之3(报错的sql盲注之exp)
			
题目提示是报错注入,于是就用盲注技巧来注入. 这里注入时发现floor,extractvalue,updatexml被吃掉了,用exp可以注入成功.(记住大小写绕过等技巧) 1.爆库 ' or exp ...
 - SASS- 局部文件(Partial)
			
SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ...
 - vue实现CheckBox与数组对象绑定
			
实现需求: 实现一个简易的购物车,页面的表格展示data数据中的一个数组对象,并提供选中商品和全选商品checkbox复选框,页面实时显示选中商品的总金额: 分析: 1:使用v-for循环渲染arra ...
 - redis(五)---- 简单消息队列
			
消息队列一个消息的链表,是一个异步处理的数据处理引擎.不仅能够提高系统的负荷,还能够改善因网络阻塞导致的数据缺失.一般用于邮件发送.手机短信发送,数据表单提交.图片生成.视频转换.日志储存等. red ...
 - POJ 1942:Paths on a Grid
			
Paths on a Grid Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 22918 Accepted: 5651 ...
 - 恒生UFX交易接口基本介绍
			
https://zhidao.baidu.com/question/203296047903136445.html 1.恒生UFT和UFX有什么区别? UFT是一个极速交易系统,UFX是一个统一接入系 ...
 - 合并两个word文档,保持样式不变
			
一.需求说明 例如将封面插入到word正文上方 二.导入依赖 <dependency> <groupId>org.apache.poi</groupId> < ...
 - 使用那各VUE的打印功能(print.js)出现多打印一个空白页的问题
			
最近这段时间,用VUE写东西,有个打印功能. 百度了一下,铺天盖地的VUE打印的两种实现方法. 很感激这些千篇一律的帖子,虽然不知道他们是否真的用过,还是只是复制粘贴. 至少这些帖子告诉我,是有两个可 ...
 - 墙壁涂色(DP)
			
蒜头君觉得白色的墙面好单调,他决定给房间的墙面涂上颜色. 他买了 3 种颜料分别是红.黄.蓝,然后把房间的墙壁竖直地划分成 n 个部分,蒜头希望每个相邻的部分颜色不能相同. 他想知道一共有多少种给房间 ...