高斯消元解异或线性方程组
作者:互联网
题面
解法
同高斯消元,把加运算
换成异或运算
即可
代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 105;
int n, a[N][N];
void gauss()
{
int r = 0, c = 0;
for(; c < n; c++)
{
int t = r;
for(int i = r; i < n; i++)
{
if(a[i][c]) t = i;
}
if(!a[t][c]) continue; // 全是0,跳下一回合
for(int i = c; i <= n; i++) swap(a[r][i], a[t][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]) // 无解
{
puts("No solution");
return;
}
}
puts("Multiple sets of solutions");
return;
}
for(int i = n - 1; i >= 0; i--)
{
for(int j = i + 1; j < n; j++)
{
a[i][n] ^= a[j][n] * a[i][j];
}
}
for(int i = 0; i < n; i++)
cout << a[i][n] << endl;
return;
}
int main()
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
for(int j = 0; j < n + 1; j++)
scanf("%d", &a[i][j]);
gauss();
return 0;
}
标签:puts,元解,++,int,异或,include,高斯消 来源: https://www.cnblogs.com/MoyouSayuki/p/16513728.html