• poj1222(高斯消元解XOR方程(模2方程))


    传送门

    ac代码:

    #include<bits/stdc++.h>
    #define per(i,a,b) for(int i=a;i<=b;i++)
    #define inf 2000000000
    using namespace std;
    typedef long long ll;
    //---------------------head
    const int N=40;
    int equ,var;
    int a[N][N];
    int x[N];//解集
    void init(){
        memset(a,0,sizeof(a));
        equ=var=30;
        for(int i=0;i<5;i++){
            for(int j=0;j<6;j++){
                int t=i*6+j;
                a[t][t]=1;
                if(i>0)a[(i-1)*6+j][t]=1;
                if(i<4)a[(i+1)*6+j][t]=1;
                if(j>0)a[i*6+j-1][t]=1;
                if(j<5)a[i*6+j+1][t]=1;
            }
        }
    }
    int Gauss(){
        int i,j,k;
        int max_r,col;
        for(k=0,col=0;k<equ&&col<var;k++,col++){
            max_r=k;
            for(i=k+1;i<equ;i++)if(abs(a[i][col])>abs(a[max_r][col]))max_r=i;
            if(max_r!=k)for(j=col;j<=var;j++)swap(a[k][j],a[max_r][j]);
            if(a[k][col]==0){k--;continue;}
            for(i=k+1;i<equ;i++){
                if(a[i][col]!=0)for(j=col;j<=var;j++)a[i][j]^=a[k][j];
            }
        }
        for(i=var-1;i>=0;i--){
            x[i]=a[i][var];
            for(j=i+1;j<var;j++)x[i]^=(a[i][j]&&x[j]);
        }
        return 0;
    }
    
    int main() {
        //freopen("Data_In.txt","r",stdin);
        int T,cas=0;
        scanf("%d",&T);
        while(T--){
            cas++;
            init();
            per(i,0,29)scanf("%d",&a[i][30]);
            Gauss();
            printf("PUZZLE #%d
    ",cas);
            for(int i=0;i<30;i++){
                printf("%d%c",x[i]," 
    "[i%6==5?1:0]);
            }
        }
        return 0;
    }
  • 相关阅读:
    20210131
    20210130
    20210129
    20210128
    20210127
    例3-7
    例3-5
    例3-4
    例3-3
    例3-2
  • 原文地址:https://www.cnblogs.com/WindFreedom/p/9751650.html
Copyright © 2020-2023  润新知