1 条题解

  • 0
    @ 2025-7-9 13:47:20

    每个约束要求子矩阵的最大值恰好等于 vv,这包含两个条件:

    • 子矩阵内至少有一个格子等于 vv
    • 子矩阵内所有格子不超过 vv

    直接处理“恰好等于”较为困难,考虑使用容斥原理。设 AiA_i 表示第 ii 个约束不满足(即子矩阵最大值 vi\neq v_i),则答案为

    S[n](1)SF(S),\sum_{S\subseteq[n]}(-1)^{|S|}\,F(S),

    其中 F(S)F(S) 表示强制子集 SS 中的约束不满足时的方案数。

    在容斥过程中,强制一个约束不满足等价于要求其子矩阵的最大值 vi1\le v_i-1(因为值域下界为 11,且已通过全局上限 mm 限制)。对于任意格子,其填数上限为覆盖它的所有约束的最小值。若被约束 jj 覆盖,则上限为

    • vj1v_j-1(若 jSj\in S);
    • vjv_j(若 jSj\notin S)。

    因此,格子 (i,j)(i,j) 在子集 SS 下的上限为:

    $$M_{i,j,S}=\min\Bigl(m,\;\min_{k\in T_{i,j}}\bigl(v_k-\mathbf 1_{k\in S}\bigr)\Bigr) $$

    其中 Ti,jT_{i,j} 是覆盖格子 (i,j)(i,j) 的约束集合,1kS\mathbf 1_{k\in S} 为指示函数。

    由于约束的矩形边界较少,采用离散化划分网格后对每个矩形区域处理即可。具体而言,将整个 h×wh\times w 网格按所有约束的行、列边界离散化,得到若干矩形区域。记每个区域 rr 的面积为 ArA_r,且该区域内所有格子的覆盖集合均相同,记为 TrT_r。我们对每个区域计算其在子集 SS 下的上界:

    $$M_r(S) \;=\;\min\Bigl(m,\;\min_{i\in T_r}(v_i - \mathbf{1}_{i\in S})\Bigr). $$

    区域 rr 中共有 ArA_r 个格子,每个格子都可独立取值 11Mr(S)M_r(S),方案数为:

    (Mr(S))Ar  mod  (109+7).\bigl(M_r(S)\bigr)^{A_r}\;\bmod\;(10^9+7).

    因为各区域之间互不影响,整个网格在子集 SS 下的方案数为各区域方案数的乘积:

    $$F(S) \;=\;\prod_{r}\;\bigl(M_r(S)\bigr)^{A_r}\;\bmod\;(10^9+7).\\ \text{Ans} \;=\;\sum_{S\subseteq[n]}(-1)^{|S|}\,F(S) \;\bmod\;(10^9+7). $$
    • 1

    信息

    ID
    575
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    80
    已通过
    10
    上传者