您的位置:首页 > 其它

B. OR in Matrix

2015-11-08 12:30 495 查看
B. OR in Matrixtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputLet'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:whereis equal to1 if some ai = 1, otherwise it is equal to0.Nam has a matrix A consisting ofm 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 matrixA, Nam creates another matrix B of the same size using formula:.(Bij isOR of all elements in rowi and column j of matrixA)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.InputThe 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 containn integers separated by spaces describing rows of matrixB (each element of B is either0 or 1).OutputIn 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 ofn integers representing matrix A that can produce given matrixB. If there are several solutions print any one.Sample test(s)Input
2 2
1 0
0 0
Output
NO
Input
2 3
1 1 1
1 1 1
Output
YES
1 1 1
1 1 1
Input
2 3
0 1 0
1 1 1
Output
YES
0 0 0
0 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;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: