不考虑数组越界应该怎么做?
查看原帖
不考虑数组越界应该怎么做?
1256608
Z09103839楼主2024/9/8 15:26

火把用偏量数组表示范围 因为萤石范围是正方形,故直接双循环更方便 考虑到数组会越界,我们可以把数组扩大一点 把(3.3)作为数组原点,遍历也从(3.3)开始,就不必考虑数组越界了

以下是AC代码,算是题解里比较简单和清晰的了

#include<iostream>
using namespace std;
int  a[110][110], sum, n, m, k;
int main() {
	cin >> n >> m >> k;
	int x=0, y=0;
	int dx1[13] = { 2,0,-2,0,1,1,1,0,0,0,-1,-1,-1 },
		dy1[13] = { 0,2,0,-2,0,1,-1,1,0,-1,0,1,-1 };
	while (m--) {
		cin >> x >> y;
		x += 2, y += 2;
		for (int i = 0; i < 13; i++)
			a[x + dx1[i]][y + dy1[i]] = 1;
	}
	while (k--) {
		cin >> x >> y;
		x += 2; y += 2;
		for (int i = x - 2; i <= x + 2; i++)
			for (int j = y - 2; j <= y + 2; j++)
				a[i][j] = 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/9/8 15:26
加载中...