D. Grid-00100(构造)

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 过程类似于下面的代码 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章