1,B - TaK Code
题目大意:找出任意一个9x9的格子满足两个条件:(1)左上角和右下角的3x3要是‘#’;(2)围绕左上角和右下角3x3的格子一周的14个符号要为‘ . ’
问题:之前是一个一个找起点,然后再进行判断,判断过程也是先判断 左上角和右下角的3x3要是‘#’,然后判断 围绕左上角和右下角3x3的格子一周的14个符号要为‘ . ’ 但死都不给过,没办法呀。所以AC代码是别人的思路,不过这个思想真的非常好用!
AC代码
#include<iostream>
#include<vector>
using namespace std;
const int N = 110;
char s[N][N];
//建立正确的二维数组
vector<string> v = { "###.?????",
"###.?????",
"###.?????",
"....?????",
"?????????",
"?????....",
"?????.###",
"?????.###",
"?????.###" };
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> s[i][j];
}
}
for (int i = 1; i <= n - 8; i++) {
for (int j = 1; j <= m - 8; j++) {//确定起点
int count = 0;
for (int a = 0; a <= 8; a++) {
for (int b = 0; b <= 8; b++) {
char c = s[a + i][b + j];
if (v[a][b] != '?') {//问号部分不用判定
if (c == v[a][b]) count++;//一一比较,如果一样,则正确
}
}
}
if (count == 32) cout << i << " " << j << endl;
}
}
return 0;
}