D - Grid-00100 传送门
题意:一个nn的矩阵内用k个1和nn-k个0,R(i)表示第i行的和,C(i)表示第i列的和,求f(A)=( max(R)-min(R ))²+( max(C)-min(C ))²的最小值
题解:可以直接观察到,沿主对角线放1是行列差值最均匀的,放满主对线可以放副对角线,放满副对角线可以放副副对角线…以此类推。
我还是太菜了,矩阵的题模了很久都没过,哭晕在厕所!
#pragma GCC optimize(2)
#include <bits/stdc++.h>
#define ll long long
#define _for(i,a,b) for(int i = (a);i<(b);i++)
#define endl '\n'
using namespace std;
const int mod=1e9+7;
const int MAX=1e6+7;
int a[305][305];
int main()
{
ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);
int t;cin>>t;
while(t--)
{
ll n,k;cin>>n>>k;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=0;
int x=0,y=0;
for(int i=0;i<k;i++)
{
a[x][y]=1;
x++;y++;
if(x==n)x=0;
if(y==n){
y=0;x++;
}
}
if(k%n==0)cout<<0<<endl;
else cout<<2<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<a[i][j];
cout<<endl;
}
}
return 0;
}