AGC 004 C. AND Grid - 构造

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值