Codeforces Round #487 (Div. 2) C. A Mist of Florescence(构造算法)

采用这种构图方式进行图形的构建。
这里写图片描述
其实是左边构造偶数块,右边构造奇数块,而且左右两边也能保证原来图形之间是联通的,新构造出来的块之间彼此独立,感觉跟四叉树有点像.

#include<bits/stdc++.h>

const int maxn=55;

char mmp[maxn][maxn];

void push(int x1,int y1,int x2,int y2,char ch){
    for(int i=x1;i<x2;i++){
        for(int j=y1;j<y2;j++){
            mmp[i][j]=ch;
        }
    }
}

int main()
{
    int a,b,c,d;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    a--,b--,c--,d--;
    push(0,0,25,25,'B');
    push(0,25,25,50,'A');
    push(25,0,50,25,'D');
    push(25,25,50,50,'C');
    for(int i=0;i<25&&a;i++){
        for(int j=0;j<25&&a;j++){
            if(i%2&&j%2) mmp[i][j]='A',a--;
        }
    }
    for(int i=0;i<25&&b;i++){
        for(int j=25;j<50&&b;j++){
            if(i%2==0&&j%2==0) mmp[i][j]='B',b--;
        }
    }
    for(int i=25;i<50&&c;i++){
        for(int j=0;j<25&&c;j++){
            if(i%2&&j%2) mmp[i][j]='C',c--;
        }
    }
    for(int i=25;i<50&&d;i++){
        for(int j=25;j<50&&d;j++){
            if(i%2==0&&j%2==0) mmp[i][j]='D',d--;
        }
    }
    printf("50 50\n");
    for(int i=0;i<50;i++){
        printf("%s\n",mmp[i]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40679299/article/details/80670771