1 条题解

  • 0
    @ 2025-10-27 18:13:04

    一、核心观察

    2×22\times 2 子矩阵中 +- 各两个,等价于任意 2×22\times 2 子矩阵的四个格子异或和为 00

    ai,j{0,1}a_{i,j} \in \{0,1\}(0 表示 +,1 表示 -),则:

    $$a_{i,j} \oplus a_{i,j+1} \oplus a_{i+1,j} \oplus a_{i+1,j+1} = 0 $$

    二、参数化通解

    可以证明,所有满足上述约束的矩阵可以写成:

    ai,j=piqja_{i,j} = p_i \oplus q_j

    其中 pi{0,1}p_i \in \{0,1\} 是行系数,qj{0,1}q_j \in \{0,1\} 是列系数。

    验证:
    代入 2×22\times 2 约束:

    $$(p_i \oplus q_j) \oplus (p_i \oplus q_{j+1}) \oplus (p_{i+1} \oplus q_j) \oplus (p_{i+1} \oplus q_{j+1}) = 0 $$

    因为每个 pip_i 出现两次,每个 qjq_j 出现两次,异或后为 0。

    并且这种形式覆盖所有解:固定第一行和第一列即可确定所有 pi,qjp_i, q_j


    三、自由变量计数

    • nnpip_immqjq_j,但整体同时翻转 ppqq 不影响 ai,ja_{i,j}(因为 piqjp_i \oplus q_j 不变)。
    • 所以自由变量数为 n+m1n + m - 1
    • 无已知条件时,方案数 = 2n+m12^{n+m-1}

    四、已知条件的处理

    已知 ay,x=va_{y,x} = v,则:

    pyqx=vp_y \oplus q_x = v

    这个等式将 pyp_yqxq_x 关联起来。

    我们可以建立一个二分图:

    • 左部:nnpip_i
    • 右部:mmqjq_j
    • 对于每个已知条件 (y,x,v)(y,x,v),在 pyp_yqxq_x 之间连一条边,权值为 vv

    五、连通分量与自由变量

    在二分图中:

    • 每个连通分量内,一旦确定一个变量的值,其余变量都唯一确定。
    • 设连通分量数为 compcomp,则这些变量中的自由变量数为 comp1comp - 1(因为可以整体翻转一个连通分量,但全局翻转所有分量不影响 ai,ja_{i,j},所以要减 1)。

    未出现在任何边中的 pip_iqjq_j 是孤立的点,每个都是一个单独的连通分量,可以自由选择 0 或 1。


    六、最终自由度数

    设实际出现在已知条件中的不同行数为 SR|SR|,不同列数为 SC|SC|
    设这些节点构成的子图有 compcomp 个连通分量。

    则总自由变量数:

    $$\text{free} = (n - |SR|) + (m - |SC|) + (comp - 1) $$

    解释:

    • (nSR)(n - |SR|):未出现的行变量,每个自由。
    • (mSC)(m - |SC|):未出现的列变量,每个自由。
    • (comp1)(comp - 1):出现的变量中,自由度数。

    方案数:

    ans=2free\text{ans} = 2^{\text{free}}

    前提是已知条件不自相矛盾。


    七、检查一致性

    用带权并查集维护二分图:
    对每个连通分量维护节点与根节点的异或距离。
    加入边 (py,qx,v)(p_y, q_x, v) 时,检查是否与已有关系矛盾。
    如果矛盾,答案直接为 0。


    八、总结步骤

    1. 收集所有已知条件,记录出现的行、列。
    2. 用并查集建立二分图,检查一致性。
    3. 若矛盾,输出 0。
    4. 否则计算:
      • 未出现的行数 = nSRn - |SR|
      • 未出现的列数 = mSCm - |SC|
      • 连通分量数 compcomp
      • 自由变量数 = (nSR)+(mSC)+(comp1)(n - |SR|) + (m - |SC|) + (comp - 1)
    5. 输出 2自由变量数mod(109+7)2^{\text{自由变量数}} \bmod (10^9+7)

    这样推导更简洁,避免了 TT 的枚举,直接使用 ai,j=piqja_{i,j} = p_i \oplus q_j 的通解形式。

    • 1

    信息

    ID
    4293
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者