求助,有一个RE
查看原帖
求助,有一个RE
912990
tcdw_11楼主2022/12/18 18:44
#include<stdio.h>
#include<stdlib.h>
int main() {
	int n, m, k, i, j, t=0, x, y, o, l;
	scanf("%d%d%d", &n, &m, &k);
	int* p = (int*)malloc(n * n * sizeof(int));
	for (i = 0; i < n * n; i++)p[i] = 0;
	for (i = 0; i < m; i++) {
		scanf("%d%d", &x, &y);
		int w = x - 1, s = n - x, a = y - 1, d = n - y;
		if (w >= 2) {
			p[(x - 3) * n + y - 1] = 1;
			p[(x - 2) * n + y - 1] = 1;
		}
		if (w == 1) p[(x - 2) * n + y - 1] = 1;
		if (s >= 2) {
			p[(x) * n + y - 1] = 1;
			p[(x+1) * n + y - 1] = 1;
		}
		if (s == 1) p[(x)*n + y - 1] = 1;;
		if (a >= 2) {
			p[(x - 1) * n + y - 3] = 1;
			p[(x - 1) * n + y - 2] = 1;
		}
		if (a == 1) p[(x - 1) * n + y - 2] = 1;
		if (d >= 2) {
			p[(x - 1) * n + y ] = 1;
			p[(x - 1) * n + y + 1] = 1;
		}
		if (d == 1) p[(x - 1) * n + y] = 1;
		if (w >= 1 && a >= 1)p[(x - 2) * n + y - 2] = 1;
		if (w >= 1 && d >= 1)p[(x - 2) * n + y ] = 1;
		if (s >= 1 && a >= 1)p[(x ) * n + y - 2] = 1;
		if (s >= 1 && d >= 1)p[(x ) * n + y ] = 1;
		p[(x - 1) * n + y - 1] = 1;
	}
	if (k != 0) {
		for (i = 0; i < k; i++) {
			scanf("%d%d", &o, &l);
			int w = o - 3, a = l - 3, s = o + 1, d = l + 1;
			if (w < 0)w = 0;
			if (a < 0)a = 0;
			if (s >= n)a = n - 1;
			if (d >= n)d = n - 1;
			for (int b = w; b <= s; b++) {
				for (int c = a; c <= d; c++) {
					p[b * n + c] = 1;
				}
			}
		}
	}
	for (j = 0; j < n * n; j++) {
		if (p[j] == 0)t++;
	}
	printf("%d", t);
	free(p);
	return 0;
}
2022/12/18 18:44
加载中...