C. The Trail
思路:
首先,\(x\) 一般只能取 0,这是因为当 \(n\) 不等于 \(m\) 时,\(x\) 取其他值都会导致总和不同。
限制有 \(n + m - 1\) 个(因为所有限制是线性相关的,所有行和为 0,前 \(m-1\) 列和为 0 可以推导出第 \(m\) 列和为 0 ),那么我们可以每次使得一个限制满足,之后不破坏这个性质
做法:
若从各种 \(a\) 到格子 \(b\) 的方向是 \(R\),那么我们我们给 \(a\) 赋值为当前 \(a\) 所在列和的相反数,使列和为 0;
若从各种 \(a\) 到格子 \(b\) 的方向是 \(D\),那么我们我们给 \(a\) 赋值为当前 \(a\) 所在行和的相反数,使行和为 0;
例子:
3 3
DRRD
0 2 3
0 0 0
3 1 0
第一个字符是 D,因此我们赋值格子 (0, 0) 为第一行和的相反数,即 -5,之后第一行没有格子了
第二个字符是 R,因此我们赋值格子 (1, 0) 为第一列和的相反数 2(注意(0,0)已经变成 -5)
第三个字符是 R,因此我们赋值格子 (1, 1) 为第二列和的相反数 -3
第四个字符是 D,因此我们赋值格子 (1, 2) 为第二行和的相反数 1
而最后将格子 (2, 2) 变成 -4,这会使得最后一行,最后一列的和同时变成 0