题目链接:高斯消元解异或线性方程组
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
int a[N][N];
int gauss()
{
int c, r;
for(c = 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 = c; j <= n; 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 res = gauss();
if(res == 0)
{
for(int i = 0; i < n; i ++) cout << a[i][n] << endl;
}
else if(res == 1) cout << "Multiple sets of solutions" << endl;
else cout << "No solution" << endl;
return 0;
}