A/B Matrix (贪心+棋盘图)

You are given four positive integers nn , mm , aa , bb ( 1 \le b \le n \le 501≤b≤n≤50 ; 1 \le a \le m \le 501≤a≤m≤50 ). Find any such rectangular matrix of size n \times mn×m that satisfies all of the following conditions:

each row of the matrix contains exactly aa ones;
each column of the matrix contains exactly bb ones;
all other elements are zeros.
If the desired matrix does not exist, indicate this.

For example, for n=3n=3 , m=6m=6 , a=2a=2 , b=1b=1 , there exists a matrix satisfying the conditions above:

$$ \begin{vmatrix} 0 & 1 & 0 & 0 & 0 & 1 \ 1 & 0 & 0 & 1 & 0 & 0 \ 0 & 0 & 1 & 0 & 1 & 0 \end{vmatrix} $$

输入格式
The first line contains an integer tt ( 1 \le t \le 10001≤t≤1000 ) — the number of test cases. Then tt test cases follow.

Each test case is described by four positive integers nn , mm , aa , bb ( 1 \le b \le n \le 501≤b≤n≤50 ; 1 \le a \le m \le 501≤a≤m≤50 ), where nn and mm are the sizes of the matrix, and aa and bb are the number of ones for rows and columns, respectively.

输出格式
For each test case print:

"YES" (without quotes) and the required matrix (if there are several answers, print any) if it exists, or
"NO" (without quotes) if it does not exist.
To print the matrix n \times mn×m , print nn rows, each of which consists of mm numbers 00 or 11 describing a row of the matrix. Numbers must be printed without spaces.

题意翻译
题目描述
你有四个正整数nn, mm, aa, bb (1\leq b\leq n\leq 50;1\leq a\leq m\leq 50)(1≤b≤n≤50;1≤a≤m≤50)。请你构造任意一个满足下列条件的nn行mm列的矩阵:

矩阵中的每一行都包含正好aa个11;
矩阵中的每一列都包含正好bb个11;
矩阵中剩下的位置全是00。
如果矩阵不存在,则表示其不存在即可。

比如说,对于n=3,m=6,a=2,b=1n=3,m=6,a=2,b=1的一组数据,可以构造出以下的满足条件的矩阵:

\begin{vmatrix} 0 & 1 & 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 & 1 & 0 \end{vmatrix}
∣
∣
∣
∣
∣
∣
∣
​
  
0
1
01
0
00
0
10
1
00
0
11
0
0
​
  
∣
∣
∣
∣
∣
∣
∣
​
 

输入格式
本题输入包含多组数据。

第一行包含一个整数tt (1\leq t\leq 1000)(1≤t≤1000),表示数据的组数。

接下来有tt行输入,每行输入都包含四个正整数:nn, mm, aa, bb (1\leq b\leq n\leq 50;1\leq a\leq m\leq 50)(1≤b≤n≤50;1≤a≤m≤50)。其中,n,mn,m为矩阵的行数和列数、a,ba,b为矩阵中每行包含的11的个数和每列包含的11的个数。

输出格式
对于每组数据,有如下输出:

如果可以构造出满足条件的矩阵,输出YES后输出构造出来的矩阵。
如果构造不出,则直接输出NO。
输入输出样例
输入 #1复制
5
3 6 2 1
2 2 2 1
2 2 2 2
4 4 2 2
2 1 1 2
输出 #1复制
YES
010001
100100
001010
NO
YES
11
11
YES
1100
1100
0011
0011
YES
1
1
View problem
#include <bits/stdc++.h>
using namespace std;
#define ri register int
#define M 105

template <class G> void read(G &x)
{
    x=0;int f=0;char ch=getchar();
    while(ch<'0'||ch>'9'){f|=ch=='-';ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    x=f?-x:x;
    return ;
 }

int n,m,a,b;
int T;
int arr[M][M];
int main(){
    
    read(T);
    while(T--)
    {
        read(n);read(m);read(a);read(b);
        if(n*a!=m*b) printf("NO\n");
        else
        {
            printf("YES\n");
            int tmp=1;
            for(ri i=1;i<=n;i++)
            {
                for(ri j=1;j<=a;j++)
                {
                    arr[i][tmp]=1;
                    tmp++;
                    if(tmp>m) tmp=1;
                }
            }
            for(ri i=1;i<=n;i++)
            {
                for(ri j=1;j<=m;j++)
                {
                    printf("%d",arr[i][j]);    
                }
               printf("\n");
            }
            for(ri i=1;i<=n;i++)
            for(ri j=1;j<=m;j++) arr[i][j]=0;
        }
    }
    return 0;
    
    
    
}
 
View Code

CF1360G A/B Matrix - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

posted @ 2022-03-14 11:02  VxiaohuanV  阅读(37)  评论(0编辑  收藏  举报