矩阵的 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 Martix int 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 "); for(i = 1; i <= n; ++i){ for(j = 1; j < m; ++j){ printf("%d ",a[i][j]); } printf("%d ",a[i][m]); } } else{ printf("NO "); } } return 0; }