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;
}