题意:
这道是CF277div2的B题,题意是有种特殊的运算OR,矩阵A做运算得到B,对于每个位置的值,是由i列和j行做‘或’运算得到的结果,现在给你一个B的矩阵,看你能得到一个合适的A矩阵吗? 可以的话,输出YES,
思路:
对于B中0的那些点,所对应的A矩阵I行和J列,都是0,先把A中那些必然为0的点存上0,对于1的那些点,要去把该行和该列去做运算,
CODE
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
int mp[150][150];
struct node
{
int x, y;
}ls[11000];
int main()
{
int n, m;
while(~scanf("%d%d",&n,&m))
{
int tp = 0;
memset(mp,-1,sizeof(mp));
int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
{
int u;
scanf("%d",&u);
if(u == 1)
{
ls[tp].x= i;
ls[tp++].y = j;
}
else
{
for(int ii = 0; ii < n; ii++)
mp[ii][j] = 0;
for(int jj = 0; jj < m; jj++)
mp[i][jj] = 0;
}
}
for(i = 0; i < tp; i++)
{
int x = ls[i].x;
int y = ls[i].y;
int ii , jj;
for( ii = 0; ii < n; ii++)
if(mp[ii][y]==-1)
break;
for(jj = 0; jj < m; jj++)
if(mp[x][jj]==-1)
break;
if(ii < n || jj < m)
continue;
else
break;
}
if(i == tp)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}