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