Codeforces Round #487 (Div. 2) C(脑洞构造题)

题意:给你4个数字a,b,c,d,让你构造出由A,B,C,D组成的图形,满足A的连通块儿数量等于a,B的连通块儿数量等于b,C的联通快数量等于c,D的联通快数量等于d。(其中凑成的矩形长宽都必须小于等于50)

a = 5 b = 3 c = 2 d = 1

给出的图可以是这样的


思路:

当时死都想不出来,结果赛后看了一张图 ,,,


真是优秀,,,解法就是长宽是50,50,之后分成4大块,之后在A的小方格里填D,D的小方格里填A,B填C,C填D就好了。

#include <bits/stdc++.h>
using namespace std;
char Map[55][55];
int main()
{
	int a,b,c,d;
	scanf("%d%d%d%d",&a,&b,&c,&d);
	puts("50 50");
	//分成4大块儿 
	for(int i = 0 ; i < 50 ; i++)
	{
		for(int j = 0 ; j < 50 ; j++)
		{
			if(i < 25) 
			{
				if(j<25) Map[i][j] = 'A';  // (0,0, 0 , 25) A 
				else Map[i][j] = 'B'; // (0,0, 25 ,50) B 
			}
			else 
			{
				if(j<25) Map[i][j] = 'C';  //不想写了。。。 
				else Map[i][j] = 'D';
			}
		}
		
	}
	a = a - 1; b = b - 1; c = c - 1 ; d = d - 1; //之后A,B,C,D数量-1, 
	for(int i = 0 ; i < 25 ; i++)
	{
		for(int j = 0 ; j < 25 ; j++)
		{
			if(d == 0) break;  //随便填 
			if(i%2 && j % 2)
			{
				Map[i][j] = 'D';
				d--;
			}
		}
	}
	for(int i = 0 ; i < 25 ; i++)
	{
		for(int j = 25 ; j < 50 ; j++)
		{
			if(c == 0) break;
			if(i%2 && j % 2)
			{
				Map[i][j] = 'C';
				c--;
			}
		}
	}
	for(int i = 25 ; i < 50 ; i++)
	{
		for(int j = 0 ; j < 25 ; j++)
		{
			if(b == 0) break;
			if(i%2 && j % 2)
			{
				Map[i][j] = 'B';
				b--;
			}
		}
	}
	for(int i = 25 ; i < 50 ; i++)
	{
		for(int j = 25 ; j < 50 ; j++)
		{
			if(a == 0) break;
			if(i%2 && j % 2)
			{
				Map[i][j] = 'A';
				a--;
			}
		}
	}
	for(int i = 0 ; i < 50 ; i++)
	{
		printf("%s\n",Map[i]);
	}
	return 0;
}

代码:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值