题解:
构造题。构造方法如下。
当我们k%n==0的时候我们可以按照构造方法每次每行每列放n个,这样可以保持等于0.否则的话我们至少有一行和一列会多1,所以答案就是2.
#include <bits/stdc++.h>
using namespace std;
const int N=305;
int ma[N][N];
signed main()
{
int t; scanf("%d",&t);
while(t--){
int n,k; scanf("%d%d",&n,&k);
memset(ma,0,sizeof ma);
if(k%n==0) puts("0");
else puts("2");
int i=0,j=0;
while(k--){
ma[i][j]=1;
i++,j++;
j=j%n;
if(i==n){
i=0,j++,j=j%n;
}
}
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) printf("%d",ma[i][j]);
puts("");
}
puts("");
}
}