AGC 004 C. AND Grid - 构造

给你一个01网格图,有一些格子为1。 构造两个01网格图B和C,使得二者的按位与是A,并且B中1是四连通的,C中1是四连通的。 3 n 500 3\le n\le500 。保证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;
}

猜你喜欢

转载自blog.csdn.net/Mys_C_K/article/details/83090529