Description



Solution

记\(N=min(n,m,l)\)

首先考虑容斥,记\(f(i)\)为至少有i个位置是极大的,显然极大的位置数上界是N。

那么显然\(Ans=\sum\limits_{i=k}^{N}(-1)^{i-k}f(i){i \choose k}\)

现在来计算\(f\)

我们考虑立方体中哪些位置是极大的,显然这些极大的位置三维坐标都互不相同,然后剩下的怎么选概率都是一样的。

将这i个位置按值从小到大排起来,那么有序的选出\(i\)个位置的方案数就是\(n^{i\downarrow}m^{i\downarrow}l^{i\downarrow}\),下降箭头表示下降幂。

然后这些位置都必须是这些坐标中最大的。记\(S_j\)为与第j个位置有坐标相同的点集。

如果直接对于每一个位置j计算它是\(S_j\)中最大的点的概率,然后再全部乘在一起,这是不正确的,因为\(S\)之间可能有交,即使排除了交的部分,概率仍然是不独立的。

但是我们注意到位置已经按照小到大排了,因此\(a_2>a_1\geq S_1,a_2\geq S_2\),因此一定满足\(a_2\geq S_1\cup S_2,a_3\geq S_1\cup S_2 \cup S_3......\)

可以发现,这样每个位置是极大的概率就独立了。

因此\(f(k)=n^{k\downarrow}m^{k\downarrow}l^{k\downarrow}\sum\limits_{j=1}^{k}{1\over nml-(n-j)(m-j)(l-j)}\)

预处理n个数的逆元可以用前缀积做到\(O(n+\log)\),因此总的时间复杂度就是\(O(tN)\)的

Code

#include <bits/stdc++.h>
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
#define N 5000005
#define LL long long
#define mo 998244353
using namespace std;
LL js[N],ny[N],d[N],nd[N],ds[N];
LL ksm(LL k,LL n)
{
LL s=1;
for(;n;n>>=1,k=k*k%mo) if(n&1) s=s*k%mo;
return s;
}
LL C(int n,int m)
{
if(n<m) return 0;
return js[n]*ny[m]%mo*ny[n-m]%mo;
}
LL n,m,l,r,n1;
int main()
{
int t;
cin>>t;
js[0]=1;
fo(i,1,N-5) js[i]=js[i-1]*(LL)i%mo;
ny[N-5]=ksm(js[N-5],mo-2);
fod(i,N-6,0) ny[i]=ny[i+1]*(LL)(i+1)%mo;
while(t--)
{
cin>>n>>m>>l>>r;
n1=min(n,min(m,l));
LL v=1,ans=0,s=1,np=n*m%mo*l%mo;
ds[0]=1;
fo(i,1,n1)
{
d[i]=(np-(n-i)*(m-i)%mo*(l-i)%mo+mo)%mo;
ds[i]=ds[i-1]*d[i]%mo;
}
nd[n1]=ksm(ds[n1],mo-2);
fod(i,n1-1,0) nd[i]=nd[i+1]*d[i+1]%mo;
fo(i,1,n1)
{
s=s*(n-i+1)%mo*(m-i+1)%mo*(l-i+1)%mo;
s=s*nd[i]%mo*ds[i-1]%mo;
if(i>=r)
{
ans=(ans+s*v%mo*C(i,r)%mo)%mo;
v=mo-v;
}
}
printf("%lld\n",ans);
}
}

[LibreOJ 3119]【CTS2019】随机立方体【计数】【容斥】的更多相关文章

  1. [CTS2019]随机立方体(容斥+组合数学)

    这题七次方做法显然,但由于我太菜了,想了一会发现也就只会这么多,而且别的毫无头绪.发现直接做不行,那么,容斥! f[i]为至少i个极值的方案,然后这里需要一些辅助变量,a[i]表示选出i个三维坐标均不 ...

  2. 【CTS2019】随机立方体(容斥)

    [CTS2019]随机立方体(容斥) 题面 LOJ 洛谷 题解 做这道题目的时候不难想到容斥的方面. 那么我们考虑怎么计算至少有\(k\)个极大值的方案数. 我们首先可以把\(k\)个极大值的位置给确 ...

  3. LOJ #3119「CTS2019 | CTSC2019」随机立方体 (容斥)

    博客链接 里面有个下降幂应该是上升幂 还有个bk的式子省略了k^3 CODE 蛮短的 #include <bits/stdc++.h> using namespace std; const ...

  4. bzoj 2839 集合计数 容斥\广义容斥

    LINK:集合计数 容斥简单题 却引出我对广义容斥的深思. 一直以来我都不理解广义容斥是为什么 在什么情况下使用. 给一张图: 这张图想要表达的意思就是这道题目的意思 而求的东西也和题目一致. 特点: ...

  5. LOJ3119 CTS2019 随机立方体 概率、容斥、二项式反演

    传送门 为了方便我们设\(N\)是\(N,M,L\)中的最小值,某一个位置\((x,y,z)\)所控制的位置为集合\(\{(a,b,c) \mid a = x \text{或} b = y \text ...

  6. 题解-CTS2019随机立方体

    problem \(\mathtt {loj-3119}\) 题意概要:一个 \(n\times m\times l\) 的立方体,立方体中每个格子上都有一个数,如果某个格子上的数比三维坐标中至少有一 ...

  7. bzoj2839: 集合计数 容斥+组合

    2839: 集合计数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 523  Solved: 287[Submit][Status][Discuss] ...

  8. BZOJ2839:集合计数(容斥,组合数学)

    Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007. ...

  9. BZOJ.5407.girls/CF985G. Team Players(三元环计数+容斥)

    题面 传送门(bzoj) 传送门(CF) \(llx\)身边妹子成群,这天他需要从\(n\)个妹子中挑出\(3\)个出去浪,但是妹子之间会有冲突,表现为\(i,j\)之间连有一条边\((i,j)\), ...

  10. BZOJ 3294: [Cqoi2011]放棋子 计数 + 容斥 + 组合

    比较头疼的计数题. 我们发现,放置一个棋子会使得该棋子所在的1个行和1个列都只能放同种棋子. 定义状态 $f_{i,j,k}$ 表示目前已使用了 $i$ 个行,$j$ 个列,并放置了前 $k$ 种棋子 ...

随机推荐

  1. 【转贴】bat脚本基础教程

    bat脚本基础教程 https://www.cnblogs.com/linyfeng/p/8072002.html 自己动手太少了. bat脚本就是DOS批处理脚本,就是将一系列DOS命令按照一定顺序 ...

  2. [HDU517] 小奇的集合

    题目链接 显然有贪心每次选择最大的两个数来做. 于是暴力地把最大的两个数调整到非负(暴力次数不超过1e5),接下来使用矩阵乘法即可. \[ \begin{pmatrix} B'\\S'\\T' \en ...

  3. MySQL中的SQL的常见优化策略

    MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 1 避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 ...

  4. 分布式唯一ID生成器Twitter

    分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一 ...

  5. [Next] 服务端渲染知识补充

    渲染 渲染:就是将数据和模版组装成 html 客户端渲染 客户端渲染模式下,服务端把渲染的静态文件给到客户端,客户端拿到服务端发送过来的文件自己跑一遍 js,根据 JS 运行结果,生成相应 DOM,然 ...

  6. uoj #46[清华集训2014]玄学

    uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...

  7. k8s弹性伸缩概念以及测试用例

    k8s弹性伸缩概念以及测试用例 本文原文出处:https://juejin.im/post/5c82367ff265da2d85330d4f 弹性伸缩式k8s中的一大亮点功能,当负载大的时候,你可以对 ...

  8. k8s自签TLS证书

    自签TLS证书 TLS证书用于进行通信使用,k8s组件需要的证书有: 第一步:安装证书生成工具cfssl 在这之前需要先建立一个目录来存放安装的工具mkdir ssl,后面将安装的工具移动到各自的目录 ...

  9. js获取url(request)中的参数

    index.htm?参数1=数值1&参数2=数值2&参数3=数据3&参数4=数值4&...... 静态html文件js读取url参数,根据获取html的参数值控制htm ...

  10. 仿造email后缀自动添加功能(1)

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...