AtCoder Grand Contest 004 C:AND Grid

题目传送门:https://agc004.contest.atcoder.jp/tasks/agc004_c

题目翻译

给你一张网格图,指定的格子是紫色的,要求你构造出两张网格图,其中一张你可以构造一些格子是红色的,另一张是蓝色的,要求红色格子与蓝色格子是四联通的,最后叠在一起与紫色格子的位置不冲突。(n,mleqslant 500)

题解

第一列全红,最后一列全蓝,奇数行全红,偶数行全蓝,然后紫色的格子都要有就(OK)了。

时间复杂度:(O(nm))

空间复杂度:(O(nm))

代码如下:

#include <cstdio>
using namespace std;

const int maxn=505;

int n,m;
char s[maxn][maxn];
bool bo[maxn][maxn];

int read() {
	int x=0,f=1;char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
	return x*f;
}

int main() {
	n=read(),m=read();
	for(int i=1;i<=n;i++) {
		scanf("%s",s[i]+1);
		for(int j=1;j<=m;j++)
			if(s[i][j]=='#')bo[i][j]=1;
	}
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=m;j++)
			if(j!=m&&(bo[i][j]||j==1||(i&1)))printf("#");
			else printf(".");
		puts("");
	}
	puts("");
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=m;j++)
			if(j!=1&&(bo[i][j]||j==m||((i&1)==0)))printf("#");
			else printf(".");
		puts("");
	}
	return 0;
}
原文地址:https://www.cnblogs.com/AKMer/p/10174796.html