• CTS2019 随机立方体


    [CTS2019]随机立方体

    给定 (n,m,l,k),表示一个大小为 (n imes m imes l) 的立方体,将 (1sim n imes m imes l) 这些数随机填入这个立方体中,对于一个格子,若这个格子上的数比三维坐标至少有一维相同的其他格子上的数都要大的话,我们就称它是极大的。

    求极大格子数恰好为 (k) 的概率,答案对 (998244353) 取模。

    (n,m,lle 5cdot 10^6,kle 100,Tle 10)

    Solution

    本来以为这是一个神仙题...现在感觉海星...

    先考虑计数。

    不难发现:

    • 极大的点数至多是 (min(n,m,l)) 的。

    • 每个极大的点会限制三个面。

    • 极大的点的坐标具体是多少不影响方案数。

    恰好不好求,考虑容斥,设 (g_k) 表示至少有 (k) 个点极大的答案。

    假设得到了 (g_{k,k+1sim min(n,m,l)}) 那么根据二项式反演,我们有:

    [f_{k}=sum_{jge k}(-1)^{j-k}inom{j}{k}g_j ]

    接下来考虑至少 (k) 个点极大的方案如何求。

    答案可以分成两个部分,选择了 (k) 个点的情况下的答案,给这 (k) 个无标号的点分配坐标的方案数。

    Part1

    考虑分配坐标的方案数。

    可以视为给 (x,y,z) 三个维度分别选出 (3) 个集合,在将 (3) 个集合的元素进行组合的方案数。

    不难发现是 (frac{inom{n}{k}inom{m}{k}inom{l}{k}(k!)^3}{k!}),请注意元素无序。

    Part2

    考虑选择了 (k) 个点的情况下的答案。

    考虑到点的位置没有影响,为了简化问题,我们考虑将点具体为 ((1,1,1),(2,2,2)...(k,k,k))

    问题等价于满足这些元素比被他们约束的元素的权值大的方案数。

    显然问题可以转换为序列计数,考虑长度为 (n imes m imes l) 的序列,这些元素必须在被他们约束的元素之后出现的方案数。

    考虑每个点约束的三个面,实际上存在交点/交线等部分,直接统计不好考虑。

    注意到每个点是平等的/等价的,那么对于某个序列,这 (k) 个点本身必然存在一种顺序关系,同时每种顺序关系的答案是相同的。

    所以考虑钦定 ((1,1,1)) 为序列中第一个出现的,((2,2,2)) 为序列中第 (2) 个出现的...

    将这个情况下的答案乘以 (k!) 即可(表示任何一种排列的答案相同)。

    那么此时 (1) 排在序列中最前面,所以一旦一个元素被 (1) 约束,他必然要排在 (1) 前面,即所有点中满足存在一个维度为 (1) 的点的数量。

    对于 (2) 而言,他约束的点的数量为所有点中满足坐标均大于 (2) 的点中存在一个维度为 (2) 的点的数量,相当于 (n,m,l) 均减少 (1) 的情况。

    考虑恰好有一个维度是 (1) 的点的数量,大概是这个:

    [n imes m+n imes (l-1)+(m-1) imes (l-1) ]

    • 请注意这些元素是有区别的。

    设这些值分别为 (f_1,f_2...f_k),其前缀和加 (k) 的和为 (S_1,S_2...S_k) 那么答案为:

    [k! imes (nml-S_k)! imes inom{nml}{S_k} imes inom{S_k-1}{f_k} imes f_k! imes .... imes inom{S_1-1}{f_1} imes f_1! ]

    即:

    [k! imes (nml)!prod_i^kfrac{1}{S_{i}} ]

    由于要乘以 (frac{1}{(nml)!}),所以这一部分消去了。

    最终的答案就是:

    [k!prod_{i}^k frac{1}{S_i} imes frac{n^{underline{k}}m^{underline{k}}l^{underline{k}}}{k!} ]

    即:

    [prod_i^k frac{1}{S_i}frac{n!m!l!}{(n-k)!(m-k)!(l-k)!} ]

    问题在于求逆元,这个可以线性求逆元,just a trick

    然后这道题就做完了。

    复杂度 (mathcal O(Tcdot min(n,m,l)+max(n,m,l)))

  • 相关阅读:
    Access restriction: The constructor SunJCE() is not accessible due to restriction on required librar
    我选择,我奋斗
    C/C++语言写程序时的“段错误”总结
    VC中临时窗口与持久窗口的对比
    一个WinSocket编程实例
    error PRJ0003 : 生成“cmd.exe”时出错
    编辑利器VIM
    LED数码管的学习
    这个世界诱惑太多
    计算机英语名词简释
  • 原文地址:https://www.cnblogs.com/Soulist/p/13638246.html
Copyright © 2020-2023  润新知