首先是 @lgvc 的 hack
3
1 2 3 4
4 5 6 7
7 8 9 10
可以说是一个确实的无唯一解的方程且没有被一些题解判断出来。
再说这个题的题解。甚至这里还有使用随机化过题的题解,似乎随机化并不是高斯 / 高斯约旦消元判断解的情况的一部分。
个人认为大部分 hack 指向的事实其实是,我们不能用同一个方程去消多个元,但是如果我们因此只允许 [i,n] 中的方程消除元 xi,又会导致又可能只有先前一个 ak,k=0,k<i 的方程 k 使得 ak,i 有值从而无法正确处理。
所以一种正确的做法应该类似最后一篇题解那样,把这样的尚未用来消除任何元但是编号更小的行也纳入考虑。个人采用了一个 vis 数组来记录行的使用。
最后扫描一遍无解再扫描一遍无穷多解即可。当然应该有很多其他做法也是对的。