首页 > 技术文章 > 【题解】CF989C A Mist of Florescence

winlere 2019-01-29 10:23 原文

【题解】CF989C A Mist of Florescence

题目大意:

让你构造一个\(n∗m\)矩阵,这个矩阵由4种字符填充构成,给定4个整数,即矩阵中每种字符构成的四联通块个数,\(n,m\)需要你自己定,但是不能超过50

发现每个联通块至少有一个。

考虑重复利用条件,我们直接构造一个\(50 \times 50\)的矩阵,平分为四块,然后在轮换地在四块里面加单个的字母。

代码蒯Van的

#include<bits/stdc++.h>

#define RP(t,a,b) for(register int (t)=(a),edd_=(b);t<=edd_;++t)
#define DRP(t,a,b) for(register int (t)=(a),edd_=(b);t>=edd_;--t)
#define ERP(t,a) for(int t=head[a];t;t=e[t].nx)
#define Max(a,b) ((a)<(b)?(b):(a))
#define Min(a,b) ((a)<(b)?(a):(b))
#define pushup(x) seg[(x)]=seg[(x)<<1]+seg[(x)<<1|1]
#define midd register int mid=(l+r)>>1
#define chek if(R<l||r<L)return
#define TMP template<class ccf>
#define rgt L,R,mid,r,pos<<1|1
#define lef L,R,l,mid,pos<<1
#define all 1,n,1

using namespace std;typedef long long ll;
TMP inline ccf qr(ccf k){
    char c=getchar();
    ccf x=0;
    int q=1;
    while(c<48||c>57)q=c==45?-1:q,c=getchar();
    while(c>=48&&c<=57)x=x*10+c-48,c=getchar();
    return q==-1?-x:x;
}
int main(){
    int a[4]; 
    puts("44 49"); 
    cin>>a[4]>>a[1]>>a[2]>>a[3];
    for(int i=1;i<=4;++i){
        char su='A'+i-1, pi=i==4?'A':su+1;
        for(int j=1;j<=5;++j,cout<<su<<endl){
            for(int o=1;o<=49;++o)cout<<su; puts("");
            for(int o=1;o<=24;++o)cout<<su<<(--a[i]>0?pi:su);
        }   for(int o=1;o<=49;++o)cout<<su; puts("");
    }
    return 0;
}

推荐阅读