CFR-644G A/B Matrix 题解

题目大意

给你一个n*m的矩阵,初始都为0,需要满足每一行有a个1,每一列有b个1,问你这个矩阵是否存在。

解题思路

很明显,1的数量等于$n\times a$,也等于$m\times b$。

所以$n\times a==m\times b$。

那么满足这个条件的矩阵一定存在。

剩下的就是需要构造矩阵了。

我们可以以行为单位循环的构造矩阵,使每一列的1的数量平均的增加。

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <cstring>
using namespace std;

int cnt[60],Map[60][60];

int main() {
int t;
cin >> t;
while (t--) {
int n, m, a, b;
cin >> n >> m >> a >> b;
memset(cnt, 0, sizeof(cnt));
memset(Map, 0, sizeof(Map));
if (n * a != m * b) {
cout << "NO" << endl;
continue;
}
int j = 1;
for (int i = 1; i <= n; i++) {
int t = a;
for (; j <= m+1 && t; j++) {
if (j == m + 1) j = 1;
Map[i][j] = 1, t--;
}
}
cout << "YES" << endl;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << Map[i][j];
}
cout << endl;
}
}
}
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • © 2015-2021 sakurakarma
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信