Codeforces Round #644 (Div. 3) G. A/B Matrix

题目链接:https://codeforces.ml/contest/1360/problem/G

题意:在一个n行m列的矩阵中 问是否存在每行有a个1 每列有b个1的矩阵 

思路:首先判断能否能放  如果能放的话 要构造的话就要考虑贪心的构造 列和行同时考虑的话很难做

那么考虑首先满足每一行放a个1 然后再考虑如何使得列的条件满足 

每一行放a个后 那些没放的位置就要在下一行继续放 只有这样贪心才能尽量地使每一列的1相等   (x放完了一行后 继续让x=1开始从头放)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define ull unsigned long long
 5 #define pb push_back
 6 const int maxn=1e6+10;
 7 const int mod=1e9+7;
 8 int ans[55][55];
 9 
10 int main()
11 {
12     ios::sync_with_stdio(false);
13     cin.tie(0);
14     int t;
15     cin>>t;
16     while(t--)
17     {
18         int n,m,a,b;
19         cin>>n>>m>>a>>b;
20         for(int i=1;i<=n;i++)
21         {
22             for(int j=1;j<=m;j++)
23             {
24                 ans[i][j]=0;
25             }
26         }
27         int sum=a*n;
28         if(sum%m==0&&sum/m==b)
29         {
30             int x=1;
31             for(int i=1;i<=n;i++)
32             {
33                 for(int j=1;j<=a;j++)
34                 {
35                     ans[i][x++]=1;
36                     if(x>m)
37                         x=1;
38                 }
39             }
40             cout<<"YES"<<'\n';
41             for(int i=1;i<=n;i++)
42             {
43                 for(int j=1;j<=m;j++)
44                 {
45                     cout<<ans[i][j];
46                 }
47                 cout<<'\n';
48             }
49         }
50         else
51         {
52             cout<<"NO"<<'\n';
53         }
54     }
55 
56 
57 
58 
59 }
View Code

猜你喜欢

转载自www.cnblogs.com/winfor/p/13194669.html
今日推荐