zoukankan      html  css  js  c++  java
  • Codeforces Round #487 (Div. 2) C. A Mist of Florescence 构造

    题意:
    让你构造一个 nmn*m 矩阵,这个矩阵由 44 种字符填充构成,给定 44 个整数,即矩阵中每种字符构成的联通块个数,n,mn,m 需要你自己定,但是不能超过5050.

    数据范围:
    每个字符组成的联通块个数不超过100.

    题解:
    正着生成联通块似乎有些费劲,不如我们逆着思考问题将400个联通块生成,并逐渐减少联通块的个数。
    A picture is worth a thousand words

    在这里插入图片描述
    任意发挥想象吧!

    Code:

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn = 100;
    char str[maxn][maxn];
    inline void init()
    {
        for(int i = 1;i <= 25; ++i)
            for(int j = 1;j <= 25; ++j) str[i][j] = 'B';
        for(int i = 1;i <= 25; ++i)
            for(int j = 26;j <= 50;++j) str[i][j] = 'A';
    
        for(int i = 26;i <= 50; ++i)
            for(int j = 1;j <= 25; ++j) str[i][j] = 'C';
        for(int i = 26;i <= 50; ++i) 
            for(int j = 26;j <= 50; ++j) str[i][j] = 'D';
        int cnt = 0;
        for(int i = 2;i < 25; i += 2)
        {
            for(int j = 2;j < 25; j += 2) 
            {
                if(cnt >= 99) break;
                ++cnt;
                str[i][j] = 'A';
            }
        }
        cnt = 0;
        for(int i = 2;i < 25; i += 2)
        {
            for(int j = 27;j < 50;j += 2) 
            {
                if(cnt >= 99) break;
                ++cnt;
                str[i][j] = 'B';
            }
        }
        cnt = 0;
        for(int i = 27;i < 50;i += 2)
            for(int j = 2;j < 25; j += 2) 
            {
                if(cnt >= 99) break;
                ++cnt;
                str[i][j] = 'D';
            }
        cnt = 0;
        for(int i = 27;i < 50;i += 2)
            for(int j = 27;j < 50;j += 2) 
            {
                if(cnt >= 99) break;
                ++cnt;
                str[i][j] = 'C';
            }
    
    }
    int main()
    {
        //freopen("input.in","r",stdin);
        int a,b,c,d;
        scanf("%d%d%d%d",&a,&b,&c,&d);
        printf("50 50
    ");
        init();
        a = 100 - a, b = 100 - b, c = 100 - c, d = 100 - d;
        int cnt_a = 0, cnt_b = 0, cnt_c = 0, cnt_d = 0;
        for(int i = 2;i < 25; i += 2)
            for(int j = 2;j < 25; j += 2)
            {
                if(cnt_a >= a) break;
                ++cnt_a;
                str[i][j] = 'B';
            }
        for(int i = 2;i < 25; i += 2)
            for(int j = 27;j < 50;j += 2)
            {
                if(cnt_b >= b) break;
                ++cnt_b;
                str[i][j] = 'A';
            } 
        for(int i = 27;i < 50;i += 2)
            for(int j = 2;j < 25; j += 2) 
            {
                if(cnt_d >= d) break;
                ++cnt_d;
                str[i][j] = 'C';
            }
        for(int i = 27;i < 50;i += 2)
            for(int j = 27;j < 50;j += 2) 
            {
                if(cnt_c >= c) break;
                ++cnt_c;
                str[i][j] = 'D';
            }
        for(int i = 1;i <= 50; ++i)
        {
            for(int j = 1;j <= 50; ++j) printf("%c",str[i][j]);
            printf("
    ");
        }
        return 0;
        
    }
    
  • 相关阅读:
    Search in Rotated Sorted Array
    排序
    Find Peak Element
    Search a 2D Matrix II
    Search a 2D Matrix
    Search for a Range
    nodejs编译sass模块包 node-compass,与gulp包gulp-sass使用方法
    canvas基础学习
    决定整理一下canvas的基础学习
    网页宽高clientWidth clientHeight获得数值不对的问题
  • 原文地址:https://www.cnblogs.com/guangheli/p/9845119.html
Copyright © 2011-2022 走看看