其他分享
首页 > 其他分享> > 高斯消元解异或线性方程组

高斯消元解异或线性方程组

作者:互联网

题面

image

解法

高斯消元,把加运算换成异或运算即可

代码

#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