链接:https://codeforces.ml/contest/1360/problem/G
You are given four positive integers nn, mm, aa, bb (1≤b≤n≤501≤b≤n≤50; 1≤a≤m≤501≤a≤m≤50). Find any such rectangular matrix of size n×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:
∣∣∣∣010100001010001100∣∣∣∣|010001100100001010|
Input
The first line contains an integer tt (1≤t≤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≤b≤n≤501≤b≤n≤50; 1≤a≤m≤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.
Output
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×mn×m, print nn rows, each of which consists of mm numbers 00&nbs***bsp;11 describing a row of the matrix. Numbers must be printed without spaces.
Example
input
Copy
5 3 6 2 1 2 2 2 1 2 2 2 2 4 4 2 2 2 1 1 2
output
Copy
YES 010001 100100 001010 NO YES 11 11 YES 1100 1100 0011 0011 YES 1 1
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
ll n,m,a,b,t,mod=1e9+7;
ll ans[100][100];
int main()
{
cin>>t;
while(t--)
{
cin>>n>>m>>a>>b;
memset(ans,0,sizeof(ans));
if(a*n==b*m)
{
yes;
int j=1;
for(int i=1;i<=n;i++)
{
for(int k=1;k<=a;j++,k++)
{
if(j>m)
{
j=1;
}
ans[i][j]=1;
}
}
for(int i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
cout<<ans[i][j];
}
cout<<endl;
}
}
else
{
no;
}
}
}