洛谷评判机制是否有问题?
查看原帖
洛谷评判机制是否有问题?
1156616
cidigdit楼主2024/8/16 02:04

这是一个简单的模拟代码

#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和洛谷都显示没有问题,也拿到了AC,输入5 1 0 1 1 的时候也得到了19的正确答案。
  • 但是在clion中如果不判断数组越界问题就会报错异常退出。 -> 进程已结束,退出代码为 -1073741819 (0xC0000005)

!!!提问!!!

这是为什么?

为什么vs和洛谷越界访问都不会报异常?

但是clion就会报异常?

这题的本意应该是需要判断是否存在越界行为的吧,为什么不判断越界访问,洛谷也可以给到AC的结果???

洛谷的评判机制是否有问题?

2024/8/16 02:04
加载中...