D. Grid-00100
就是构造一个方格,方格内每一个数字 1 对 行/列 的贡献值为 1
求 (val_row_max-val_row_min)² + (val_col_max-val_col_min)² 的最小值
如上图所示,我们先将红色格子看成白色的:
当 k%n==0 时,及每一行都放 k/n 个 ‘1’ 这样答案则为 0
那么当 k%n 不为 0 时,这时候就需要关注红色格子了:
我们将前 k%n 的余数行多涂 1 个 ‘1’,其余的行仍然涂 k/n 个 ‘1’,这样(列的最大值-列的最小值)也是 1,所以答案为 1+1=2
const int N=300+5;
int n,m,t;
int i,j,k;
int a[N][N];
void print(int ans)
{
cout<<ans<<endl;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
cout<<a[i][j];
}
cout<<endl;
}
}
int main()
{
IOS;
rush(){
ms(a,0);
cin>>n>>k;
int ans,res=0,len=k/n;
if(k%n==0) ans=0;
else ans=2,res=k%n;
for(i=0;i<res;i++){ //置 1
for(j=i;j<=i+len;j++){
a[i][j%(n)]=1;
}
}
for(i=res;i<n;i++){
for(j=i;j<=i+len-1;j++){
a[i][j%(n)]=1;
}
}
print(ans);
}
//PAUSE;
return 0;
}
置 1 过程类似于下面的代码