Codeforces 989C A Mist of Florescence 【构造】

第二次做构造题,感觉好做不好想啊。

在游戏里面如果你得到一个狗粮罐头,那就一定会有一个关卡你需要使用掉狗粮罐头;但这题里面说n和m不固定,但实际上我们大胆的说n=40,m=50的情况下一定能构造出目标图。

先把n=1-10填满a,11-20填满b,21-30填满c,31-40填满d

然后a里面放b-1个B联通分量,b里面放c-1个C连通分量,c里面放d-1个D连通分量,d里面放a-1个A连通分量。

#include<iostream>
using namespace std;
char g[41][51];//40*50的格子 

int main()
{
    int a,b,c,d; cin>>a>>b>>c>>d;
    a--; b--; c--; d--;
    
       for(int i=1;i<=40;i++){
           for(int j=1;j<=50;j++){
               if(i/10==0 || i==10) g[i][j]='A'; 
               else if(i/10==1 || i==20) g[i][j]='B';
               else if(i/10==2 || i==30) g[i][j]='C';
               else g[i][j]='D';
           //    cout<<i<<" "<<j<<" "<<g[i][j]<<endl;
        }
    } 

    //a里面放b,b里面放c,c里面放d,d里面放a
    for(int i=1;i<=10;i+=2){
        if(b==0) break;
        for(int j=1;j<=50;j+=2){
            g[i][j]='B';
            b--;
            if(b==0) break;
        }
    } 
    
    for(int i=11;i<=20;i+=2){
        if(c==0) break;
        for(int j=1;j<=50;j+=2){
            g[i][j]='C';
            c--;
            if(c==0) break;
        }
    } 
    
    for(int i=21;i<=30;i+=2){
        if(d==0) break;
        for(int j=1;j<=50;j+=2){
            g[i][j]='D';
            d--;
            if(d==0) break;
        }
    } 
    
    for(int i=31;i<=40;i+=2){
        if(a==0) break;
        for(int j=1;j<=50;j+=2){
            g[i][j]='A';
            a--;
            if(a==0) break;
        }
    }
    
    cout<<40<<" "<<50<<endl;
    for(int i=1;i<=40;i++){
        for(int j=1;j<=50;j++) cout<<g[i][j];
        cout<<endl;
    }
    
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ZhenghangHu/p/9186825.html
今日推荐