1. 程式人生 > >AGC 004 C. AND Grid - 構造

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; }