数据小直接模拟 暴力加判断少说八九十行 所以我们来去掉判断( 首先定大一点数组 如110 110 然后将从(1,1)开始的录入改成从(3,3)开始 在遍历时舍去x=1,x=2,y=1,y=2 即从(3,3)开始遍历 这样就不用考虑越界问题
感觉不用上代码
#include <iostream>
using namespace std;
int n, m, k, x, y, a[110][110], sum;
int main() {
cin >> n >> m >> k;
for (int i = 1; i <= m; i++) {
cin >> x >> y;
x += 2;
y += 2;
a[x][y] = 1;
a[x + 2][y] = 1;
a[x + 1][y] = 1;
a[x + 1][y + 1] = 1;
a[x + 1][y - 1] = 1;
a[x][y + 2] = 1;
a[x][y + 1] = 1;
a[x][y - 1] = 1;
a[x][y - 2] = 1;
a[x - 1][y + 1] = 1;
a[x - 1][y] = 1;
a[x - 1][y - 1] = 1;
a[x - 2][y] = 1;
}
for (int i = 1; i <= k; i++) {
cin >> x >> y;
x += 2;
y += 2;
a[x][y] = 1;
a[x + 2][y] = 1;
a[x + 1][y] = 1;
a[x + 1][y + 1] = 1;
a[x + 1][y - 1] = 1;
a[x][y + 2] = 1;
a[x][y + 1] = 1;
a[x][y - 1] = 1;
a[x][y - 2] = 1;
a[x - 1][y + 1] = 1;
a[x - 1][y] = 1;
a[x - 1][y - 1] = 1;
a[x - 2][y] = 1;
a[x - 2][y + 1] = 1;
a[x - 2][y - 1] = 1;
a[x - 2][y + 2] = 1;
a[x - 2][y - 2] = 1;
a[x - 1][y + 2] = 1;
a[x - 1][y - 2] = 1;
a[x + 1][y - 2] = 1;
a[x + 1][y + 2] = 1;
a[x + 2][y + 2] = 1;
a[x + 2][y - 2] = 1;
a[x + 2][y + 1] = 1;
a[x + 2][y - 1] = 1;
}
for (int i = 3; i <= n + 2; i++) {
for (int j = 3; j <= n + 2; j++) {
if (!a[i][j])
sum++;
}
}
cout << sum;
return 0;
}