zoukankan      html  css  js  c++  java
  • Gym 100008E Harmonious Matrices 高斯消元

    POJ 1222 高斯消元更稳

    看这个就懂了

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 2000;
    int a[maxn][maxn];
    int x[maxn];
    int dx[]= {0,0,-1,0,1};
    int dy[]= {0,-1,0,1,0};
    
    void Guass(int equ,int var)
    {
        int row,col;
        row=col=0;
        while(row<equ && col<var)
        {
            //列非零主
            int r=row;
            for(int i=row; i<equ; i++)
                if(a[i][col]!=0)
                {
                    r=i;
                    break;
                }
            if(r!=row)
            {
                for(int j=col; j<var+1; j++)
                    swap(a[row][j],a[r][j]);
            }
            if(a[row][col]==0)//说明有自由变元
            {
                col++;
                continue;
            }
            //消元
            for(int i=row+1; i<equ; i++)
            {
                if(a[i][col]==0) continue;
                for(int j=col; j<var+1; j++)
                    a[i][j]^=a[row][j];
            }
            row++;
            col++;
        }
        int num = col-row;
        for(int i=var-1; num!=0; i--,num--)
            x[i] = 1;
        num = col-row;
        for(int i=equ-num-1; i>=0; i--)
        {
            x[i]=a[i][var];
            for(int j=i+1; j<var; j++)
                x[i]^=(a[i][j]*x[j]);
        }
    }
    
    int main()
    {
    //    freopen("in.txt","r",stdin);
        int t,n,m;
        scanf("%d", &t);
        while(t--)
        {
            scanf("%d%d", &n, &m);
            memset(a,0,sizeof(a));
            for(int i=0; i<n; i++)
                for(int j=0; j<m; j++)
                    for(int k=0; k < 5; k++)
                    {
                        int nx = i+dx[k];
                        int ny = j+dy[k];
                        if(nx >= 0 && nx < n && ny >= 0 && ny < m) a[i*m+j][nx*m+ny] = 1;
                    }
            Guass(n*m, n*m);
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<m-1; j++)
                    printf("%d ", x[i*m+j]);
                printf("%d
    ", x[i*m+m-1]);
            }
        }
        return 0;
    }
  • 相关阅读:
    luogu P3295 [SCOI2016]萌萌哒
    luogu P4916 魔力环
    CF997C Sky Full of Stars
    CF961G Partitions
    android屏蔽软键盘并且显示光标
    设置和获取Android中各种音量
    自定义广播
    发送广播
    android取高度
    Java数字格式化
  • 原文地址:https://www.cnblogs.com/pach/p/7300197.html
Copyright © 2011-2022 走看看