首页 > 代码库 > Codeforces 486B - OR in Matrix

Codeforces 486B - OR in Matrix

矩阵的 OR ,也是醉了。

题目意思很简单,就是问你有没有这么一个矩阵,可以变化,得到输入的矩阵。

要求是这个矩阵每行都可以上下任意移动,每列都可以左右任意移动。

 

解题方法:

  1.也是导致我WA 的原因,首先要判断是否是一个零矩阵,如果是一个零矩阵,那么YES输出

  2.判断输入矩阵存在1的那个位置,在输出矩阵的同一行同一列是否存在1,如果没有则NO输出

  3.开辟数组X[MAXN],Y[MAXN]记录这一行或者这一列是否有0这个元素

//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler#include <stdio.h>#include <iostream>#include <cstring>#include <cmath>#include <stack>#include <queue>#include <vector>#include <algorithm>#define ll long long#define Max(a,b) (((a) > (b)) ? (a) : (b))#define Min(a,b) (((a) < (b)) ? (a) : (b))#define Abs(x) (((x) > 0) ? (x) : (-(x)))using namespace std;const int INF = 0x3f3f3f3f;int a[111][111], b[111][111], x[111], y[111];// Martix a as output Martix, Martix b as input Martixint n, m;int main(){    int i, j, t, k;    while(EOF != scanf("%d%d",&n,&m)){        for(i = 1; i <= n; ++i){            for(j = 1; j <= m; ++j){                scanf("%d",&a[i][j]);                b[i][j] = a[i][j];                if(!a[i][j]){                    x[i] = 1;                    y[j] = 1;                }            }        }        bool ff = true;        for(i = 1; i <= n; ++i){            for(j = 1; j <= m; ++j){                if(x[i] || y[j]){   // nice cood                    a[i][j] = 0;                } else{                    ff = false;                }            }        }        bool falg = false;        for(i = 1; i <= n; ++i){            for(j = 1; j <= m; ++j){                if(a[i][j]) falg = true;            }        }        if(ff)  falg = true;        for(i = 1; i <= n; ++i){            for(j = 1; j <= m; ++j){                bool kk = false;                if(b[i][j]){                    for(int ii = 1; ii <= n; ++ii){                        if(a[ii][j])    kk = true;                    }                    for(int jj = 1; jj <= m; ++jj){                        if(a[i][jj])    kk = true;                    }                    if(!kk){                        falg = false;                    }                }            }        }        if(falg){            printf("YES\n");            for(i = 1; i <= n; ++i){                for(j = 1; j < m; ++j){                    printf("%d ",a[i][j]);                }                printf("%d\n",a[i][m]);            }        }        else{            printf("NO\n");        }    }    return 0;}

 

Codeforces 486B - OR in Matrix