英文题看不懂
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
b矩阵是a的或,已知b求啊;
思路:反推a,找矛盾;
题目描述
Let's define logical OR as an operation on two logical values (i. e. values that belong to
the set {0, 1}) that is equal to 1 if either or both of the logical values is set to 1, otherwise it is 0. We can define logical OR of
three or more logical values in the same manner:
where is equal to 1 if some ai = 1, otherwise it is equal to 0.
Nam has a matrix A consisting of m rows and n columns. The rows are numbered from 1 to m,
columns are numbered from 1 to n. Element at row i (1≤ i≤ m) and column j (1≤ j≤ n) is denoted as Aij.
All elements of A are either 0 or 1. From matrix A, Nam creates another matrix B of the same size using formula:
(Bij is OR of all elements in row i and column j of matrix A)
Nam gives you matrix B and challenges you to guess matrix A. Although Nam is smart, he could
probably make a mistake while calculating matrix B, since size of A can be large.
输入
The first line contains two integer m and n (1
≤
m,
n
≤
100), number of rows and number of columns of matrices respectively.
The next m lines each contain n integers separated by spaces describing rows of matrix B (each element of B is either 0 or 1).
输出
In the first line, print "NO" if Nam has made a mistake when calculating B, otherwise print "YES".
示例输入
2 2 1 0 0 0 2 3 1 1 1 1 1 1
示例输出
NO YES
提示
来源
scf0920
示例程序
#include <iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<algorithm>
#include<stack>
#include<set>
#include<vector>
#define LL long long
using namespace std;
int a[110][110],b[110][110];
int main()
{
int m,n;
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
a[i][j]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&b[i][j]);
if(!b[i][j])
{
for(int k=1;k<=n;k++)
{
a[k][j]=0;
}
for(int k=1;k<=m;k++)
{
a[i][k]=0;
}
}
}
}
bool flag=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(b[i][j])
{
flag=0;
for(int k=1;k<=n;k++)
{
if(a[k][j])
{
flag=1;
break;
}
}
for(int k=1;k<=m;k++)
{
if(a[i][k])
{
flag=1;
break;
}
}
}
if(!flag)
break;
}
if(!flag)
break;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}