C. A Mist of Florescence

本文提供了一种解决 Codeforces 989C 问题的方法,通过构造一个50*50的矩阵,确保不同字符形成独立的联通块。详细介绍了使用 C++ 实现的代码,包括如何分配字符到矩阵的不同区域,以及如何通过特定模式减少联通块的数量。

链接

[http://codeforces.com/contest/989/problem/C]

题意

给定A B C D四个字符个数,让你构造一个矩阵使得他们的个数恰好那么多,联通块算一块

分析

构造50*50的矩阵,分成4个区域让不同的插进其他的领域,对角插入,不然有联通块。

代码

#include<bits/stdc++.h>
using namespace std;
char ans[52][52];
void color(int x,int y,char ch){
    for(int i=1;i<=25;i++)
    for(int j=1;j<=25;j++)
    ans[i+x][j+y]=ch;
}
void solve(int x,int y,char ch,int n){
    for(int i=1;i<=25&&n;i+=2)
    for(int j=1;j<=25&&n;j+=2)
    {
        ans[x+i][y+j]=ch;
        n--;
    }
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int a,b,c,d;
    //freopen("in.txt","r",stdin);
    cin>>a>>b>>c>>d;
    color(0, 0, 'C');
    color(0, 25, 'D');
    color(25, 25, 'A');
    color(25, 0, 'B');
    solve(0, 0, 'A', a-1);
    solve(0, 25, 'B', b-1);
    solve(25, 25, 'C', c-1);
    solve(25, 0, 'D', d-1);
    puts("50 50");
    for(int i=1;i<=50;i++)
     {
        for(int j=1;j<=50;j++)
        putchar(ans[i][j]);
        putchar('\n');
     }
    return 0;
}

转载于:https://www.cnblogs.com/mch5201314/p/9892158.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值