​传送门​​ 题意:给出老师的笔记,看你是否能够模拟出来。你只能写出

***
*.*
***

这样的笔画,看你是否可以模仿出老师的签名。
思路:开两个数组,一个存储原图,一个再加一个相同大小全为‘.’组成的图。
扫一遍原图,如果发现四周包括每个左上角右下角等,遇到全为#的情况,将另一个图对应的位置也使四周变化。
最后比较两图,若相等,则可以,反之不行。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<cmath>
#include<cctype>
#include<stack>
#include<map>
#include<string>
#include<cstdlib>
#define ll long long
#define N 100010
const int maxn=1000+50;
using namespace std;
queue<int>q;
char a[maxn][maxn];
char b[maxn][maxn];
int main() {
ll n;
ll m;
cin >> n >> m;
for(int i = 0; i < n; i++)
cin >> a[i];
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++) {
b[i][j] = '.';
}
for(int i = 1; i < n-1 ; i++)
for(int j = 1; j < m-1 ; j++)
if(a[i -1][j+1] == '#'&&a[i - 1][j-1] == '#'&&a[i + 1][j-1] == '#'&&a[i + 1][j+1] == '#' && a[i - 1][j] == '#' && a[i][j + 1] == '#' && a[i][j - 1] == '#') {
b[i][j - 1] = '#';
b[i][j + 1] = '#';
b[i - 1][j] = '#';
b[i + 1][j] = '#';
b[i + 1][j-1] = '#';
b[i + 1][j+1] = '#';
b[i - 1][j+1] = '#';
b[i - 1][j-1] = '#';
}
bool flag = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++)
if(a[i][j] != b[i][j]) {
flag = 1;
break;
}
if(flag)
break;
}
if(flag)
cout << "NO" << endl;
else
cout << "YES" << endl;
return 0;
}