[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 }
posted @ 2018-10-18 21:31  DCDCBigBig  阅读(125)  评论(0编辑  收藏  举报