本题就是先求出A数列,然后求出对应的正确的B,再与所给的实际的B一一对比,如果全都相同则YES,否则错误。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int N = 105;
int row[N],col[N];
bool visr[N],visc[N],vis[N][N];
int a[N][N],d[N][N];
int main() {
int n,m;
while(scanf("%d%d",&m,&n)!=EOF) {
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
scanf("%d",&a[i][j]);
}
}
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if(a[i][j]==0) {
row[i]=1;
col[j]=1;
}
}
}
int flag=0;
memset(visr,0,sizeof(visr));
memset(visc,0,sizeof(visc));
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if(!row[i]&&!col[j]) {
vis[i][j]=1;
visr[i]=1;
visc[j]=1;
}
}
}
memset(d,0,sizeof(d));
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if(visr[i]||visc[j]) {
d[i][j]=1;
}
if(a[i][j]!=d[i][j]) {
flag=1;
}
}
}
if(flag) {
printf("NO\n");
continue;
} else {
printf("YES\n");
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
if(j==n-1)
printf("%d\n",vis[i][j]);
else
printf("%d ",vis[i][j]);
}
}
}
}
return 0;
}
本文介绍了一个关于矩阵操作的问题——B.ORinMatrix。任务要求根据给定的矩阵B推测原始矩阵A,并验证B是否正确计算得出。文章详细阐述了解决方案的思路与实现过程。
where
is
equal to
.
547

被折叠的 条评论
为什么被折叠?



