[agc004c]and grid
别问我为什么咕了两天
题意:
给出一个$H\times W$的网格图A,仅由'.'和'#'构成,边界上没有'#'且至少有一个'#'。构造两个网格图B和C,大小均为$H\times W$,要求A中为'#'的位置B、C中也为'#',A中为'.'的位置B、C中不能都为'#',且B、C中由'#'构成的联通块有且只有一个。
$3\leq H,W\leq 500$
本题有SPJ
题解:
这种题貌似跟数据范围没什么关系。。。
敢写敢过?
B中第一列和奇列填'#',C中偶列和最后一列填'#',必定满足条件
别问我怎么证的,orzwzd
代码:
1 #include<algorithm>
2 #include<iostream>
3 #include<cstring>
4 #include<cstdio>
5 #include<cmath>
6 #include<queue>
7 #define inf 2147483647
8 #define eps 1e-9
9 using namespace std;
10 typedef long long ll;
11 int n,m;
12 char a[501][501],b[501][501],c[501][501];
13 int main(){
14 scanf("%d%d",&n,&m);
15 for(int i=1;i<=n;i++)scanf("%s",a[i]+1);
16 for(int i=1;i<=n;i++){
17 for(int j=1;j<=m;j++){
18 if(a[i][j]=='#')b[i][j]=c[i][j]='#';
19 else b[i][j]=c[i][j]='.';
20 }
21 }
22 for(int i=1;i<=m;i++)b[1][i]=c[n][i]='#';
23 for(int i=1;i<=m;i++){
24 for(int j=2;j<n;j++){
25 if(i&1)b[j][i]='#';
26 else c[j][i]='#';
27 }
28 }
29 for(int i=1;i<=n;i++)printf("%s\n",b[i]+1);
30 printf("\n");
31 for(int i=1;i<=n;i++)printf("%s\n",c[i]+1);
32 return 0;
33 }