[AcWing 884] 高斯消元解异或线性方程组
作者:互联网
复杂度 $ O(n^{3}) $
总体复杂度 $ 100^{3} = 1 \times 10^{6} $
点击查看代码
#include<iostream>
using namespace std;
const int N = 110;
int n, a[N][N];
int gauss()
{
int c, r;
for (c = 0, r = 0; c < n; c ++) {
int t = r;
for (int i = r; i < n; i ++)
if (a[i][c]) {
t = i;
break;
}
if (!a[t][c]) continue;
for (int i = c; i <= n; i ++) swap(a[t][i], a[r][i]);
for (int i = r + 1; i < n; i ++)
if (a[i][c])
for (int j = n; j >= c; j --)
a[i][j] ^= a[r][j];
r ++;
}
if (r < n) {
for (int i = r; i < n; i ++)
if (a[i][n])
return 2;
return 1;
}
for (int i = n - 1; i >= 0; i --)
for (int j = i + 1; j < n; j ++)
a[i][n] ^= a[i][j] & a[j][n];
return 0;
}
int main()
{
cin >> n;
for (int i = 0; i < n; i ++)
for (int j = 0; j < n + 1; j ++)
cin >> a[i][j];
int t = gauss();
if (t == 0) {
for (int i = 0; i < n; i ++) printf("%d\n", a[i][n]);
}
else if (t == 1) puts("Multiple sets of solutions");
else puts("No solution");
return 0;
}
- 消成上三角矩阵;
- 判断解的个数:
① 完美的上三角矩阵:唯一解;
② 有矛盾:无解;
③ 无矛盾:多组解; - 高斯消元
枚举每一列 c (已经换过的行不动,只对未换过的行执行以下操作)
① 找到不为 0 的一行;(c 列中不为 0 的)
② 将该行换到最上面;(未换过的行中的最上面,换过的行的下面)
③ 将下面所有行的第 c 列清成 0;
标签:return,884,元解,复杂度,++,int,未换,高斯消 来源: https://www.cnblogs.com/wKingYu/p/16263543.html