题目传送门: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;
}