Codeforces 486B OR in Matrix【水题】
来源:互联网 发布:linux vi esc 没反应 编辑:程序博客网 时间:2024/06/05 03:19
题意:
一个新的矩阵的元素Bij为 矩阵A的第i行和A的第j列的元素相互按位与运算的结果。现在给你一个矩阵B,求矩阵A。如果存在输出YES,就把矩阵打印出来,否则输出NO。
思路:
当矩阵元素是0的时候最为特殊,现将储存答案的矩阵置为1,遇到交叉点是0的情况就把矩阵交叉点所在的行列全部置为0。处理结束后再查一遍1的位置是否合法。
#include <map>#include <set>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <iostream>#include <stack>#include <cmath>#include <string>#include <vector>#include <cstdlib>//#include <bits/stdc++.h>//#define LOACL#define space " "using namespace std;//typedef long long LL;//typedef __int64 Int;typedef pair<int, int> paii;const int INF = 0x3f3f3f3f;const double ESP = 1e-5;const double PI = acos(-1.0);const int MOD = 1e9 + 7;const int MAXN = 1e5;int c[110][110], b[110][110];int main() {int n, m;while (scanf("%d%d", &n, &m) != EOF) {for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {scanf("%d", &b[i][j]);c[i][j] = 1;}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (!b[i][j]) {for (int k = 0; k < m; k++) {c[i][k] = 0;}for (int k = 0; k < n; k++) {c[k][j] = 0;}}}}bool flag;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {flag = false;if (b[i][j]) {flag = true;for (int k = 0; k < m; k++) {if (c[i][k]) flag = false;}for (int k = 0; k < n; k++) {if (c[k][j]) flag = false;}}if (flag) break;}if (flag) break;}if (flag) printf("NO\n");else {printf("YES\n");for (int i = 0; i < n; i++) {for (int j = 0; j < m - 1; j++) {printf("%d ", c[i][j]);}printf("%d\n", c[i][m - 1]);}}}return 0;}
0 0
- Dialog对话框以及自定义Dialog
- 【Design Pattern】-----Facade
- codeforces 721C (拓排 + DP)
- java io系列05之 ObjectInputStream 和 ObjectOutputStream
- UVA 1212 - Duopoly(最小割)
- Codeforces 486B OR in Matrix【水题】
- 机房收费系统总结
- Android开发——View动画、帧动画和属性动画详解
- ubuntu14.04 + caffe安装
- 大数加法
- anglular 自定义指令scope =
- Java中com.jcraft.jsch.JSch讲解
- 常见四种和缓存相关的首部
- Intellij IDEA 搭建maven web项目