Description
Solution
非常巧妙的构造题。
考虑先构造出不相交的矩阵,就是相当于两只手交叉的两个矩阵。
如下图:
然后再把输入的字符矩阵中是 #
的位置在两个矩阵中都赋值为 #
,就能做到四联通且恰好覆盖了。
Code
(附上丑陋的代码,懒得改了。)
#include <bits/stdc++.h>
using namespace std;
const int N = 510;
int n, m;
char s[N][N], a[N][N], b[N][N];
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i){
scanf("%s", s[i] + 1);
for(int j = 1; j <= m; ++j)
a[i][j] = b[i][j] = s[i][j];
}
for(int i = 1; i <= n; ++i)
a[i][1] = b[i][m] = '#';
for(int i = 1; i <= n; i += 2)
for(int j = 2; j < m; ++j)
a[i][j] = b[i + 1][j] = '#';
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= m; ++j)
putchar(a[i][j]);
puts("");
}
puts("");
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= m; ++j)
putchar(b[i][j]);
puts("");
}
return 0;
}
\[\_EOF\_
\]