1 条题解
-
0
题目翻译
E. XOR 矩阵
给定四个整数 ,统计满足以下条件的数组对 的数量:- 包含 个整数,每个整数在 范围内;
- 包含 个整数,每个整数在 范围内;
- 由 和 构造的 XOR 矩阵 中,不同的数值个数不超过 2。
答案对 取模。
题解
1. 关键观察
如果数组 或 中至少有三个互不相同的数,那么 XOR 矩阵中也会出现至少三个不同的值。
证明:假设 中有三个不同的数 ,任取 中一个数 ,则 互不相同。因此矩阵中至少有三个不同的值。
因此,合法情况只能出现在 和 各自最多包含 2 个不同数值。
所以我们将问题分成以下四部分:
- 中所有数相同, 中所有数相同;
- 中所有数相同, 中有 2 个不同的数;
- 中有 2 个不同的数, 中所有数相同;
- 和 都恰好有 2 个不同的数。
2. 第一部分: 全相同, 全相同
- 选择 中唯一的数: 种( 到 )
- 选择 中唯一的数: 种
所以第一部分答案为:
3. 第二部分: 全相同, 有 2 个不同的数
- 选择 中唯一的数: 种
- 选择 中的两个不同的数:从 到 中选两个有序数对 ,且 。
先选两个不同的数值,再决定哪个是第一个哪个是第二个,但这里我们直接统计无序对更方便:
无序对的数量为 。 - 分配 个位置给这两个数:每个位置可以是 或 ,但不能全相同,所以有 种分配方式。
因此第二部分答案为:
$$\text{part}_2 = (A+1) \cdot \frac{B(B+1)}{2} \cdot (2^m - 2) $$
4. 第三部分: 有 2 个不同的数, 全相同
对称地:
$$\text{part}_3 = (B+1) \cdot \frac{A(A+1)}{2} \cdot (2^n - 2) $$
5. 第四部分: 和 都恰好有 2 个不同的数
设 中的两个数为 , 中的两个数为 。
5.1 约束条件
XOR 矩阵由以下四个值组成:
$$\begin{aligned} & a_1 \oplus b_1, \quad a_1 \oplus b_2, \\ & a_2 \oplus b_1, \quad a_2 \oplus b_2 \end{aligned} $$要使矩阵中不超过 2 个不同的值,必须满足:
否则,,且 ,会导致至少三个不同的值。
上述条件等价于:
记 ,则 ,且 (因为 )。
并且 ,。
5.2 条件转化
我们需要:
且 。
所以问题转化为:统计满足上述条件的三元组 的数量。
5.3 数位 DP
由于 可达 ,我们需要按位处理(最多 30 位)。
定义 表示:
- 已经处理了最高 位(从高位到低位)
- 表示 的前 位与 的前 位相等, 表示已经小于
- 表示 的前 位与 的前 位相等, 表示已经小于
- 表示 的前 位全为 0, 表示已经出现过非零位(即 )
转移:
枚举当前位 ,需要满足:- 的当前位(如果 且 的当前位为 0,则 不能为 1)
- 的当前位(同理)
- 的当前位约束:
设 ,,则 当且仅当 且 时不成立(因为 )。
更严谨地,从高位到低位比较 和 ,第一次出现不同的位必须满足 且 (此时 )。
若当前位 ,则 ,违反条件。
若 ,则 ,满足条件。
若 ,则相等,继续比较下一位。
若 ,则 ,相等,继续。
所以约束:不能出现 。 - 同理, 不能出现 。
更新标志:
初始状态:(第 0 位表示最高位之前)。
最终答案:所有 的和,其中 是位数(如 30)。
5.4 分配位置
对于每一组 :
- 中的 个位置:每个位置可以是 或 ,但不能全相同,所以 种。
- 中的 个位置:每个位置可以是 或 ,但不能全相同,所以 种。
因此第四部分答案为:
$$\text{part}_4 = \text{count\_quadruples} \cdot (2^n - 2) \cdot (2^m - 2) $$其中 是上述 DP 求得的三元组 的数量(每个三元组对应唯一的 ,因为 ,)。
6. 最终答案
$$\text{ans} = \text{part}_1 + \text{part}_2 + \text{part}_3 + \text{part}_4 $$所有运算在模 下进行。
7. 复杂度
- 数位 DP 状态数:,每层转移 种可能,常数约 次操作。
- 总复杂度:,可以轻松通过。
8. 注意事项
- 当 或 时, 可能为负,但题目保证 ,所以安全。
- 模运算下减法要加模数。
- 可以用快速幂计算,或者预处理。
- 1
信息
- ID
- 6354
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者