B. OR in Matrix

来源:互联网 发布:软件测试很难吗 编辑:程序博客网 时间:2024/05/29 03:42
B. OR in Matrix
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

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 to1, otherwise it is 0. We can define logicalOR of three or more logical values in the same manner:

where is equal to1 if some ai = 1, otherwise it is equal to0.

Nam has a matrix A consisting of m rows and n columns. The rows are numbered from1 to m, columns are numbered from1 to n. Element at rowi (1 ≤ i ≤ m) and columnj (1 ≤ j ≤ n) is denoted asAij. All elements ofA are either 0 or 1. From matrix A, Nam creates another matrix B of the same size using formula:

.

(Bij isOR of all elements in row i and column j of matrix A)

Nam gives you matrix B and challenges you to guess matrixA. Although Nam is smart, he could probably make a mistake while calculating matrixB, since size of A can be large.

Input

The first line contains two integer m andn (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 either0 or 1).

Output

In the first line, print "NO" if Nam has made a mistake when calculatingB, otherwise print "YES". If the first line is "YES", then also printm rows consisting of n integers representing matrix A that can produce given matrixB. If there are several solutions print any one.

Sample test(s)
Input
2 21 00 0
Output
NO
Input
2 31 1 11 1 1
Output
YES1 1 11 1 1
Input
2 30 1 01 1 1
Output
YES0 0 00 1 0
wa了几发才过、
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <cstdlib>using namespace std;int a[110][110], b[110][110];int main() {memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));int m, n;cin >> m>> n;for (int i = 0; i<m; i++) {for (int j = 0; j<n; j++) {cin >> a[i][j];b[i][j] = 1;}}if (m == n && m == 1) {cout << "YES" << endl;cout << a[0][0] << endl;return 0;}int flag1 = 0, flag2 = 0, flag3 = 0, flag4 = 1;for (int i = 0; i<m; i++) {for (int j = 0; j<n; j++) {if (a[i][j] == 1) {flag4 = 0;flag1 = 0, flag2 = 0;for (int k = 0; k<n; k++) {if (a[i][k] != 1)flag1 ++ ;}for (int k = 0; k<m; k++) {if (a[k][j] != 1)flag2 ++ ;}if (flag1 == 0 && flag2 == 0)flag3 ++ ;else if (flag1>0 && flag2>0) {cout << "NO"<< endl;return 0;}}}}if (flag4 == 1) {cout << "YES" << endl;for (int i = 0; i<m; i++) {for (int j = 0; j<n-1; j++) {cout << a[i][j] << " ";}cout << a[i][n-1] << endl;}cout << endl;return 0;}if (flag3 > 0) {cout << "YES"<< endl;for (int i = 0; i<m; i++) {for (int j = 0; j<n; j++) {if (a[i][j] == 0) {for (int k = 0; k<n; k++) b[i][k] = 0;for (int k = 0; k<m; k++)b[k][j] = 0;}}}for (int i = 0; i<m; i++) {for (int j = 0; j<n-1; j++) {cout << b[i][j] << " ";}cout << b[i][n-1] << endl;} cout << endl;}else {cout << "NO" << endl;}return 0;}


0 0