能把开关/线性关系写成增广矩阵,在实数、有限域和 XOR 域中选择正确消元运算;判断无解、唯一解、多解,并由秩计算自由变量数。
前置:线性方程、模逆、异或。
高斯消元的本质是做不改变解集的初等行变换,逐列选择主元并消去其他行。真正需要记录的不是“消到第几行”,而是秩:
rank=variables:唯一解;运算域决定细节:实数要选绝对值较大主元并用 eps;模质数用逆元;XOR 域中加减都是 XOR,非零主元只有 1,可用 bitset 加速。
row<equations 与列范围。[0,p);负数修正。令 $x_{r,c}$ 表示是否按格子。灯 $(r,c)$ 最终状态等于初态 XOR 自己及四邻按键,要求为 0,得到 30 元 XOR 方程。对增广矩阵做 Gauss-Jordan;题目数据保证可输出方案。每个方程恰表达一盏灯最终熄灭,解向量与按键方案双向等价。
for each lamp cell:
equation has variables at self and four neighbors
rhs = initial lamp state
for each variable column:
find pivot row with bit 1; swap
XOR pivot row into every other row having this bit
output solved variable bits as 5x6 grid
消元只需行阶梯形。若零系数行 RHS 为 1 则无解;否则每个非主元变量可独立取 0/1,主元由它们唯一确定,所以方案数为 $2^{n-rank}$。方程逐状态精确表达所有影响 XOR,故解与操作集合一一对应。
matrix[target_switch][pressed_switch] = whether press affects target
rhs = initial XOR target
rank = XOR_Gaussian_elimination(matrix)
if contradictory row exists: print unreachable
else: print 2 ** (n - rank)
建立 $m\times(n+1)$ 模 7 增广矩阵。逐列找非零主元,乘逆元归一,并消去其他行。初等行变换在域 $\mathbb F_7$ 上可逆,因此保持解集;矛盾行、秩与变量数分别给出三种结论。唯一解按题目代表元映射输出。
复杂度 $O(mn\min(m,n))$,本题规模可行。
build equations modulo 7
for each variable column:
select nonzero pivot
normalize pivot by modular inverse
eliminate this column from all other rows
check contradiction; compare rank with variable count
CodeForces-1101G Zero XOR Subset 把 XOR 线性无关转成线性基;线性基更适合在线插入和最大 XOR,高斯矩阵更适合显式方程与恢复解。
用枚举所有 $2^n$ 变量对拍 XOR 消元;模 7 题随机生成解再造方程,核对恢复。调试优先打印 rank、主元列和矛盾行,而不是只看最终答案。