越界处理
查看原帖
越界处理
1098832
nijige楼主2024/10/18 17:40

数据小直接模拟 暴力加判断少说八九十行 所以我们来去掉判断( 首先定大一点数组 如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;
}
2024/10/18 17:40
加载中...