• 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)

  • 相关阅读:
    Re: 求助:5道算法题
    AutoComplete的字典建立和单词查找算法实现
    求教大牛!关于后缀树
    Qt OpenGL教程
    调试宏
    if结合errorlevel使用:判断一个DOS命令执行成功与否
    写给自己,关于对纯技术的追求,以及为了金钱与前途的技术追求
    <转>我对菜鸟成长的看法
    看完电影有感。。。。。
    <转>标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
  • 原文地址:https://www.cnblogs.com/Lamboofhome/p/16003273.html
Copyright © 2020-2023  润新知