(构造)【CF 989C】C. A Mist of Florescence

这个逻辑题。。真是有点蠢,没经验,数据都不看仔细就瞎敲代码了,算是长记性了。

给四个数字,分别是字符A、B、C、D的联通块的个数,但是数据范围给出的是每个字符的联通块最多也就100个,加起来400个。n和m的范围却是1到50,所以直接构造一个很大的图,中间弄出分隔的一小块用来填充字符就好了。

当晚我是没想到,过了两天想了个构造,应该还算好敲的。先构造出下图这样的,‘X'代表可以用来填充其他字符的位置,其他的就是固定了的字符。然后再将a、b、c、d的数量-1(因为填充下面这个构造图就已经出现了一个联通块),再分别将'A' 'B' 'C' 'D'分别填充在1~8,9~16,17~24,25~32行中的'X'位置。

32 50
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
XCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
XCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
XCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
XCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXCXC
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
XDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
XDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
XDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
XDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXD
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
XAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
XAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
XAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
XAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
XBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
XBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
XBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

XBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB


/*
* @Author: Samson
* @Date:   2018-06-11 22:23:03
* @Last Modified by:   Samson
* @Last Modified time: 2018-06-14 00:00:20
*/
//   @URL : http://codeforces.com/contest/989/problem/C
#include<bits/stdc++.h>
#include<algorithm>
#include <cstdlib>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int MAXN = 1e5+10;

char ch[55][55];

void init(int row,char c)
{
	for(int i = row; i < 8+row; ++i)
	{
		for(int j = 1; j <= 50; ++j)
		{
			if(i%2 || j%2==0)
				ch[i][j] = c;
		}
	}
}

void fill_in(int row,char f,int num)
{
	char blank = ch[row][1];
	for(int i = row; i<8+row; ++i)
	{
		if(i%2)	continue;
		for(int j = 1; j<=50; j += 2)
		{
			if(!num)
				ch[i][j] = blank;
			else if(num--)
				ch[i][j] = f;
		}
	}
}
void print()
{
	printf("32 50\n");
	for(int i = 1; i <= 2*4*4; ++i)
	{
		for(int j = 1; j <= 50; ++j)
		{
			printf("%c", ch[i][j]);
		}
		printf("\n");
	}
}

int main(void)
{
	int a[5];
	char word[] = {'A','B','C','D'};
	while(~scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]))
	{
		memset(ch,0,sizeof ch);
		init(1,'C'), init(9,'D'), init(17,'A'), init(25,'B');
		for(int row = 1,i = 0; i < 4; row += 2*4,++i)
		{
			fill_in(row,word[i],a[i]-1);
		}
		print();
	}
	return 0;
}



猜你喜欢

转载自blog.csdn.net/suiguia/article/details/80686944