原题链接: https://codeforces.ml/contest/1360/problem/G
题意
构造一个n*m的数组(n行m列)
每列有a个1
每行有b个1
思路
每行b个1
,一共n行 所以1
一共有 b*n
个
m*a
同理,所以 m*a == b*n
时有解。
每一行的输出起点在上一行的最后一个1
之后
代码
#include<iostream>
using namespace std;
const int N = 55;
void solve()
{
int a,b,n,m;
cin >>n>>m>>a>>b;
int ans[N][N];
if(m*b == n*a)
{
cout <<"YES"<<endl;
int s = 0;
for(int i=0; i<n; i++)
{
string str(m,'0');
for(int j=0; j<a; j++)
{
str[(j+s)%m] = '1';
}
cout << str<<endl;
s = (s+a)%m;
}
}
else cout <<"NO"<<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t;
cin >> t;
while(t--)
{
solve();
}
}