给你一个01网格图,有一些格子为1。 构造两个01网格图B和C,使得二者的按位与是A,并且B中1是四连通的,C中1是四连通的。
3
≤
n
≤
500
3\le n\le500
3≤n≤500。保证A边界没有1。A中至少有一个1。
题解:除了边界,B填奇数行,C填偶数行;B填左边界,C填右边界即可……
#include<bits/stdc++.h>
#define gc getchar()
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define Rep(i,v) rep(i,0,(int)v.size()-1)
#define lint long long
#define db double
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define debug(x) cerr<<#x<<"="<<x
#define sp <<" "
#define ln <<endl
using namespace std;
typedef pair<int,int> pii;
typedef set<int>::iterator sit;
inline int inn()
{
int x,ch;while((ch=gc)<'0'||ch>'9');
x=ch^'0';while((ch=gc)>='0'&&ch<='9')
x=(x<<1)+(x<<3)+(ch^'0');return x;
}
const int N=510;char a[N][N],b[N][N],c[N][N];
int main()
{
int n=inn(),m=inn();rep(i,1,n) scanf("%s",a[i]+1);
rep(i,1,n) rep(j,1,m) b[i][j]=c[i][j]='.';
rep(i,1,n) rep(j,1,m) if((i%2==1||j==1||a[i][j]=='#')&&j!=m) b[i][j]='#';
rep(i,1,n) rep(j,1,m) if((i%2==0||j==m||a[i][j]=='#')&&j!=1) c[i][j]='#';
rep(i,1,n) { rep(j,1,m) printf("%c",b[i][j]);printf("\n"); }
printf("\n");
rep(i,1,n) { rep(j,1,m) printf("%c",c[i][j]);printf("\n"); }
return 0;
}