题目链接
题意:
给你一个n*n矩阵和k个1,请你构造出一个使(列和的最大值-列和的最小值的平方)+(行和的最大值-行和的最小值)的平方最小的01矩阵。
思路:
构造一个全为0的矩阵然后将1加到行列和最小的位置即可。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=2e5+5;
const int mod=998244353;
const int inf=0x7fffffff;
const double pi=3.1415926535;
using namespace std;
signed main()
{
IOS;
int t;
cin>>t;
while(t--)
{
int n,k,arr[305][305];
memset(arr,0,sizeof arr);
cin>>n>>k;
if(k%n==0)
{
cout<<0<<endl;
}
else
{
cout<<2<<endl;
}
for(int i=1;i<=n;i++)
{
int m=i;
for(int j=1;j<=n;j++)
{
if(m>n)
{
m=1;
}
if(k<=0)
{
break;
}
arr[j][m] =1;
m++;
k--;
}
if(k<=0)
{
break;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(j!=n)
{
cout<<arr[i][j];
}
else
{
cout<<arr[i][j]<<endl;
}
}
}
}
return 0;
}