只过了一个求助火把是对的
查看原帖
只过了一个求助火把是对的
1474975
Dankingzzz楼主2024/10/21 14:54
#include <stdio.h>

int main() {
    int n, m, k;
    int a[100][100];
    int x[100];
    int y[100];
    int o[100];
    int p[100];
    int d = 0;

    scanf("%d %d %d", &n, &m, &k);

    for (int i = 0; i < m; i++) {
        scanf("%d %d", &x[i], &y[i]);
    }

    for (int i = 0; i < k; i++) {
        scanf("%d %d", &o[i], &p[i]);
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            a[i][j] = 0;
        }
    }

    for (int i = 0; i < m; i++) {
        a[x[i]][y[i]] = -1;
        for (int j = x[i]; j >= 0; j--) {
            a[j][y[i]] = 1;
        }
        for (int j = x[i] + 1; j < n; j++) {
            a[j][y[i]] = 1;
        }
        for (int k = y[i]; k < n; k++) {
            a[x[i]][k] = 1;
        }
        for (int k = y[i] - 1; k >= 0 ; k--) {
            a[x[i]][k] = 1;
        }
        if (x[i] - 1 >= 0 && y[i] - 1 >= 0) {
            a[x[i] - 1][y[i] - 1] = 1;
        }
        if (x[i] + 1 < n && y[i] + 1 < n) {
            a[x[i] + 1][y[i] + 1] = 1;
        }
        if (x[i] - 1 >= 0 && y[i] + 1 < n) {
            a[x[i] - 1][y[i] + 1] = 1;
        }
        if (x[i] + 1 < n && y[i] - 1 < n) {
            a[x[i] + 1][y[i] - 1] = 1;
        }
    }

    for (int i = 0; i < k; i++) {
        a[o[i]][p[i]] = -2;
        for (int j = p[i]; j <= p[i] + 2 && j < n; j++) {
            for (int k = 0; k < n; k++) {
                a[k][j] = 1;
            }
        }
        for (int j = p[i] - 1; j >= p[i] - 2 && j >= 0; j--) {
            for (int k = 0; k < n; k++) {
                a[k][j] = 1;
            }
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (a[i][j] == 0) {
                d++;
            }
        }
    }

    printf("%d\n", d);
    return 0;
}
2024/10/21 14:54
加载中...