题意;
找出一个 n ∗ m n*m n∗m 的矩阵,要求每一行严格存在 a a a 个 1 1 1,每一列严格存在 b b b 个 1 1 1,其余部分均为 0 0 0 。
就是要填充
n
∗
a
n*a
n∗a 或
b
∗
m
b*m
b∗m 个
1
1
1 ,所以只要
n
∗
a
=
=
b
∗
m
n*a == b*m
n∗a==b∗m 成立,则一定存在答案。
看几组就能发现规律。
3 ∗ 6 3*6 3∗6 的矩阵中
a = 2 , b = 1 a=2,b=1 a=2,b=1
则构造出了矩阵
110000 110000 110000
001100 001100 001100
000011 000011 000011
3 ∗ 6 3*6 3∗6 的矩阵中
a = 4 , b = 2 a=4,b=2 a=4,b=2
则构造出了矩阵
111100 111100 111100
110011 110011 110011
001111 001111 001111
AC代码;
int n, m, a, b;
char c[100][100];
int main()
{
int t;
sd(t);
while (t--)
{
sdd(n, m);
sdd(a, b);
if (n * a != b * m)
{
puts("NO");
continue;
}
rep(i, 0, n - 1)
{
rep(j, 0, m - 1)
{
c[i][j] = '0';
}
}
int pos = 0;
rep(i, 0, n - 1)
{
rep(j, 0, a - 1)
{
c[i][pos] = '1';
pos++;
pos = pos % m;
}
}
puts("YES");
rep(i, 0, n - 1)
{
rep(j, 0, m - 1)
{
cout << c[i][j];
}
cout << endl;
}
}
return 0;
}