这是一个简单的模拟代码
#include<stdio.h>
int n, m, k, x, y, ans;
int arr[105][105];
int x1[13] = { 2,0,-2,0,1,1,1,0,0,0,-1,-1,-1 },
y1[13] = { 0,2,0,-2,0,1,-1,1,0,-1,0,1,-1 };
int x2[25] = { -2,-2,-2,-2,-2,-1,-1,-1,-1,-1,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2 },
y2[25] = { -2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,0,1,2 };
int main() {
scanf("%d %d %d", &n, &m, &k);
while (m) {
m--;
scanf("%d %d", &x, &y);
for (int i = 0; i < 13; i++) {
arr[x + x1[i]][y + y1[i]] = 1;
}
}
while (k) {
k--;
scanf("%d %d", &x, &y);
for (int i = 0; i < 25; i++) {
arr[x + x2[i]][y + y2[i]] = 1;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (arr[i][j] == 0) ans++;
}
}
printf("%d", ans);
return 0;
}
但是细看就会发现,在判断亮光的时候并没有注意是否会产生 /*数组越界*/ 的情况!!!
eg:
5 1 0
1 1
就会出现arr[-1][1] = 1;的情况
if (x + x1[i] > 0 || x + x1[i] < 105 || y + y1[i] > 0 || y + y1[i] < 105)
这是为什么?
为什么vs和洛谷越界访问都不会报异常?
但是clion就会报异常?
这题的本意应该是需要判断是否存在越界行为的吧,为什么不判断越界访问,洛谷也可以给到AC的结果???
洛谷的评判机制是否有问题?